www RewriteRule不适用于具有其他RewriteRules的子目录

时间:2014-08-12 18:30:56

标签: apache .htaccess mod-rewrite redirect

我的根文件夹中有一个.htaccess文件,用于将非www访问重定向到www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule .* https://www.example.com/$0 [L,R=301]

规则工作正常,但是在一个子目录(称为/sub)中,我有另一个带有重写规则的.htaccess文件 - 不应用www规则。

当然我可以复制粘贴它 - 但这显然不是最好的解决方案。

我尝试将RewriteOptions Inherit添加到子目录.htacces - 并且规则有效,但规则与子文件夹有关,而不是子文件夹,因此 {{3} } 被重定向到 http://example.com/sub/something.html (从路径中删除sub文件夹)

在子目录的htaccess中设置RewriteBase /也不好 - 因为它会干扰我在文件中的其他规则

我真的很感谢你的帮助

1 个答案:

答案 0 :(得分:1)

默认情况下,子目录的.htaccess不会继承父.htaccess中定义的规则。要强制执行此行为,您需要在/sub/.htaccess

中插入此行
RewriteOptions Inherit

RewriteEngine On行之前。

Read more about RewriteOptions

尽管请记住,父.htaccess规则仅在您当前的.htaccess规则之后应用,并且至少无法在Apache 2.2中更改此行为。如果这对您有影响,那么您需要复制www规则并将其置于/sub/.htaccess之内的其他规则之上。

编辑:还要将您的根https规则更改为:

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301,NE]