繁体   English   中英

在网站根目录和子目录的.htaccess中使用mod_rewrite

[英]Using mod_rewrite in .htaccess in both website root and a subdirectory

我的困境:

在我网站根目录的.htaccess中:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

在.htaccess中的子目录/ foo中

RewriteEngine On
RewriteRule ^page1\.html$ /foo/page2.html [R=301]

首先,我试图确保所有请求都包含开头的www。 在第二个中,我将foo子目录中对page1.html的请求重定向到该子目录中的page2.html。

在我的浏览器中,尝试访问:

http://www.example.com/foo/page2.html <==效果很好

http://www.example.com/foo/page1.html <==重定向到http://www.example.com/foo/page2.html ,很好

http://example.com/foo/page1.html <==重定向到http://www.example.com/foo/page2.html ,很好

http://example.com/foo/page2.html <==没有重定向发生,不好

==>应该重定向到:http://**www.**example.com/foo/page2.html

通过实验,似乎重定向规则在请求网站的根才生效.htaccess文件在该子目录页, 如果该子目录不包含.htaccess文件,或者它并指定一个重写规则确实需要对于此特定请求的效果。

谁能看到我在做什么错? 如何获得粘贴www的重写规则。 如果缺少http://example.com/foo/page2.html会触发?


谢谢你,那行得通!

作为记录,然后我不得不将站点根目录中文件的重写规则更改为:

RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]

很好 谢谢!

您在foo/.htaccess中缺少以下指令:

RewriteOptions inherit

cf. 文档

我不确定/.htaccess中的规则为何不适用于/foo/.htaccess 通常, .htaccess文件将沿目录结构继承规则,这可能导致各种奇怪的事情。 对于您的特定解决方案,您可以将所有相关规则放在父.htaccess文件中,如下所示:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteRule ^foo/page1\.html$ /foo/page2.html [R=301]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM