.htaccess中精确匹配RewriteCond不生效的问题排查
规则错误排查与修正
原规则的核心问题
- 条件变量使用错误:第一条规则用
%{REQUEST_URI}判断主机名,这是完全错误的——%{REQUEST_URI}代表请求路径(比如/或/test123),而非请求的主机名,正确变量应为%{HTTP_HOST}。同时=^abc-dev\.cco\.com的写法矛盾,=是精确匹配,加上^前缀后无法匹配任何合法请求URI,导致这条规则永远不会触发。 - 逻辑覆盖混乱:原规则第一条本应处理根路径请求,但因条件错误,所有请求都会落到第二条规则,不管是否为根路径,完全不符合需求。
修正后的规则
RewriteEngine On # 匹配abc-dev.cco.com的根路径请求 RewriteCond %{HTTP_HOST} ^abc-dev\.cco\.com$ [NC] RewriteRule ^/?$ https://xyz.sp.com/sites/SitePages/abc-migration.aspx [R=301,L] # 匹配abc-dev.cco.com的带路径参数请求 RewriteCond %{HTTP_HOST} ^abc-dev\.cco\.com$ [NC] RewriteRule ^(.*)$ https://xyz-curt-dev.cco.com/redir/xyz?u=%{REQUEST_URI}&h=abc-dev.cco.com [R=301,L]
修正说明
- 第一条规则:通过
%{HTTP_HOST}精确匹配目标主机,RewriteRule ^/?$适配根路径请求(/?兼容部分服务器对根路径的解析差异),满足条件时跳转至指定迁移页面。 - 第二条规则:同样匹配目标主机,
^(.*)$覆盖所有非根路径的请求,自动传递原请求路径和主机名到目标地址。 [R=301,L]标记:R=301表示永久重定向,L表示执行完当前规则后终止后续处理,避免规则冲突。
内容的提问来源于stack exchange,提问作者Kul Bhushan Prasad
相关产品推荐
相关产品推荐

