我的根文件夹中有一个.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 /
也不好 - 因为它会干扰我在文件中的其他规则
我真的很感谢你的帮助
答案 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]