为何RewriteCond %{HTTP_HOST}规则无法匹配指定URL?技术求助
问题原因及解决方案
嘿,这个问题本质是对Apache RewriteCond变量的作用范围理解错了,咱们一步步说清楚:
核心问题:%{HTTP_HOST}不包含请求路径
当你请求https://www.example.com/meetings-and-events/soho时,%{HTTP_HOST}这个变量只存储请求的主机域名——也就是www.example.com(或者不带www的example.com),完全不包含域名后面的/meetings-and-events/soho路径部分。
而你的规则里写的是:
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com\/meetings-and-events\/soho$ [NC]
这个正则要求%{HTTP_HOST}的值必须是www.example.com/meetings-and-events/soho或者example.com/meetings-and-events/soho,但实际上%{HTTP_HOST}从来不会带上路径,所以这条规则永远匹配不上目标URL。
正确的写法:拆分主机和路径的判断
要匹配这个完整的URL,需要分别用两个RewriteCond:一个匹配域名,一个匹配路径(用%{REQUEST_URI}变量,它专门存储请求的路径部分)。示例代码如下:
# 第一步:匹配域名(支持www.example.com或example.com,不区分大小写) RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] # 第二步:匹配请求路径(支持/meetings-and-events/soho或末尾带斜杠的版本,不区分大小写) RewriteCond %{REQUEST_URI} ^/meetings-and-events/soho/?$ [NC] # 这里写你需要执行的重写规则,比如重定向到某个页面 RewriteRule ^(.*)$ /your-target-page.html [L,R=301]
额外小提醒
- Apache的Rewrite正则里,
/不需要转义,所以你可以把\/直接写成/,代码会更简洁 [NC]标记的用法是对的,它能让规则不区分大小写,适配不同的请求写法
内容的提问来源于stack exchange,提问作者Stephen Walsh
相关产品推荐
相关产品推荐

