我的困境:
在我网站根目录的 .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]
这很好。谢谢!