.htaccess配置仅顶级域名重定向 排除子路径跳转问题求解
问题原因
现有域名重定向规则存在两处逻辑错误:
RewriteRule ^匹配范围无限制:正则中^仅标记字符串起始位置,未添加路径结束约束,根路径、任意子路径的请求都会命中该规则- 规则内的
$1属于无效反向引用:当前RewriteRule的匹配模式未设置括号捕获组,$1无法获取实际路径值,所有命中规则的请求都会被直接跳转至目标域名,最终触发全路径强制跳转。
修正后的完整.htaccess配置
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} ^(?:www\.)?joshrodg\.com$ [NC] RewriteRule ^$ https://joshrodgers.com/ [R=301,L,NE]
规则说明
- 把重定向规则的匹配模式从
^改为^$:该正则仅匹配空请求路径,也就是用户直接访问域名根的场景,访问/example、/test这类带任意子路径的请求不会命中这条规则,自然不会触发跳转 - 移除了无效的
$1引用:因为仅需要根路径跳转到目标域名的根地址,不需要携带任何路径参数,直接写死目标地址即可 - 测试注意事项:301是永久重定向标记,会被浏览器、CDN节点强制缓存,修改规则后请先清理本地浏览器缓存,或者临时把
R=301改成R=302(临时重定向)验证逻辑正常后,再改回R=301避免缓存异常。
内容的提问来源于stack exchange,提问作者joshmrodg
相关产品推荐
相关产品推荐

