0

我的困境:

在我网站根目录的 .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]

这很好。谢谢!

4

2 回答 2

4

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

RewriteOptions inherit

参看。文档

于 2008-12-04T00:51:39.387 回答
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]
于 2008-12-03T23:58:35.017 回答