根目录htaccess的www转非www规则在blogs目录失效如何解决
问题原因
Apache默认配置下,子目录的.htaccess重写规则会完全覆盖根目录的重写规则,不会自动继承父级规则,所以访问blogs目录下的路径时,根目录配置的www跳转规则不会被触发。
解决方法
这里提供两种可行的配置调整方案,任选其一即可:
方案1:子目录直接复用跳转规则(兼容性最好)
直接将根目录的www跳转规则添加到blogs子目录.htaccess的最开头,调整后的完整配置如下:
RewriteEngine On # www跳转非www规则 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # 原有URL美化规则 RewriteRule ^/?author(?:/(?:.*/)?([^/]+))?/?$ index.php?author=$1 [L,NC,QSA] RewriteRule ^/?tag(?:/(?:.*/)?([^/]+))?/?$ index.php?tag=$1 [L,NC,QSA] RewriteRule ^/?post(?:/(?:.*/)?([^/]+))?/?$ index.php?post=$1 [L,NC,QSA] RewriteRule ^/?page(?:/(?:.*/)?([^/]+))?/?$ index.php?page=$1 [L,NC,QSA]
方案2:开启重写规则继承(适合多子目录场景)
如果站点有多个子目录都需要复用根目录的规则,可以在blogs子目录.htaccess开头添加继承配置,让父目录的规则优先于子目录规则执行:
RewriteEngine On # 优先继承根目录的重写规则 RewriteOptions InheritBefore # 原有URL美化规则 RewriteRule ^/?author(?:/(?:.*/)?([^/]+))?/?$ index.php?author=$1 [L,NC,QSA] RewriteRule ^/?tag(?:/(?:.*/)?([^/]+))?/?$ index.php?tag=$1 [L,NC,QSA] RewriteRule ^/?post(?:/(?:.*/)?([^/]+))?/?$ index.php?post=$1 [L,NC,QSA] RewriteRule ^/?page(?:/(?:.*/)?([^/]+))?/?$ index.php?page=$1 [L,NC,QSA]
注意事项
配置修改完成后需要清空浏览器缓存再测试,因为301永久跳转默认会被浏览器本地缓存,避免旧缓存影响验证结果。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

