htaccess redirect子目录(文件夹)到同一子目录中的单个页面

时间:2017-03-07 06:54:38

标签: apache .htaccess redirect subdirectory

我在.htaccess遇到了另一个问题,我似乎找不到合适的解决方案。我想要完成的是当您复制/粘贴下面显示的网址时,从同一目录中的子目录重定向到特定的html文档

例如: http://example.com/staging/ 测试/ http://example.com/staging/ test / page.html

我的(差不多)工作方法:

Options -Indexes -MultiViews
RewriteEngine on

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

此代码的问题在于它基本上会重定向到正确的 page.html ,但如果您想点击page.html上的任何链接,它只会重定向到page.html而不是转到子目录中的特定链接/ test / let' s /test/page-2.html

重要提示:此重定向应仅影响子目录" staging"。包括root在内的所有其他子目录都不会受到影响。

其他信息: 此代码也在我的.htaccess文件中,用于删除目录的.html扩展名" staging"

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

目录" staging"没有连接到任何CMS,只包含.html文件。 我在共享托管环境(Hostgator / cPanel)上。

谢谢。

2 个答案:

答案 0 :(得分:1)

使用以下规则,您只使用L标志,但我正在修改它以进行重定向,如上所述。

Options -Indexes -MultiViews
RewriteEngine on

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

答案 1 :(得分:0)

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

要单独匹配目录,模式必须停在test,这是通过字符串anchor的结尾来完成的

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

您可以保留相对路径并添加RewriteBase指令

,而不是绝对路径
RewriteBase /staging
RewriteRule ^test/$ test/page.html [R,L]

如果您只想重写,请忽略R标记。