2017-03-07 61 views
0

我遇到了另一个与.htaccess有关的问题,我无法为其找到正确的解决方案。我试图做到的是从一个子目录同一目录内重定向到一个特定的HTML文档时复制/粘贴显示下方htaccess将子目录(文件夹)重定向到同一子目录中的单个页面

网址,例如: http://example.com/staging/测试/http://example.com/staging/测试/ page.html中

我的(几乎)工作方法:

Options -Indexes -MultiViews 
RewriteEngine on 

RewriteRule ^test/(.*)$ test/page.html [L] 

此代码的问题在于它基本上会重定向到正确的page.html,但是如果您想单击page.html上的任何链接,它只是重新导向到page.html,而不是转到子目录中的特定链接/测试/让我们说/test/page-2.html

重要:此重定向只会影响子目录“升级”。所有其他的子目录(包括root)不会受到影响。

其他信息: 此代码也是我的.htaccess文件来删除该目录的.html扩展名“上演”

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule ^(.*)$ $1.html [L] 

目录“分期”未连接到任何CMS和只包含.html文件。 我在一个共享主机环境(Hostgator/cPanel)。

谢谢。

回答

1

使用下面的规则,你只使用L标志,但我正在修改它作为你提到的重定向。

Options -Indexes -MultiViews 
RewriteEngine on 

RewriteRule ^test/$ /staging/test/page.html [R=301,L] 
+0

不幸的是,这给了我一个404页面。 – Alex

+0

你在哪里使用规则! –

+0

我在放置在子目录“test”中的.htaccess文件中使用规则。根目录中还有另一个.htaccess。但是,子目录“测试”必须完全独立于根。 – Alex

0

您只想重定向directoy,但不是其中的文件。规则中的模式表示匹配目录test/后面跟着任何.*,包括任何文件。

单独匹配的目录,该模式必须在test,这是由字符串的结束完成停止anchor

RewriteRule ^test/$ /staging/test/page.html [R,L] 

而不是绝对路径,你可以保持相对路径,并添加一个RewriteBase指令

RewriteBase /staging 
RewriteRule ^test/$ test/page.html [R,L] 

如果哟你只想重写,忽略了R的标志。

+0

这产生404找不到。我认为这是因为目录“test”没有index.html。 – Alex

+0

我刚刚查看了其他评论,.htaccess文件在子目录'test'中? –

+0

谢谢你提出这个问题。 .htaccess文件位于“分段”之前的目录中。 http://example.com/staging/test(你实际上提供了一个解决方案,让我隐藏相同设置的.html扩展名) – Alex

相关问题