我的困境:
在我网站的根目录中的.htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
在子目录/ foo中的.htaccess
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文件中的重定向规则似乎只对该子目录 IF 中的页面请求生效,该子目录不包含.htaccess文件,或者它确实并指定了一个对这个特定请求生效的重写规则。
有谁能看到我做错了什么?我怎样才能获得坚持www的重写规则。如果http://example.com/foo/page2.html无法触发它?
谢谢你跳,这很有用!
为了记录,我必须将站点根目录中的重写规则更改为:
RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]
哪个好。谢谢!
答案 0 :(得分:4)
答案 1 :(得分:2)
我不确定为什么/.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]