RewriteMap与.htaccess配置问题:用户名传递异常致映射返回0
问题解决步骤
1. 修正捕获组引用错误
你的核心问题是RewriteRule里误用了$1:$1是匹配RewriteRule正则(即URL路径部分)的捕获组,而你要传递的子域名是在RewriteCond里捕获的,应该用%1来引用RewriteCond的第一个捕获组。
修正后的规则:
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com RewriteRule ^(.*)$ https://www.newexample.com/profile/${zq3:%1|0} [L,R=301]
(建议加上R=301明确永久跳转,利于SEO)
2. 排除www前缀
要忽略www前缀,需在原有条件前增加排除规则,避免www.example.com被错误匹配:
# 排除www前缀的域名 RewriteCond %{HTTP_HOST} !^www\.example\.com # 匹配非www的子域名 RewriteCond %{HTTP_HOST} ^(.*)\.example\.com RewriteRule ^(.*)$ https://www.newexample.com/profile/${zq3:%1|0} [L,R=301]
3. 额外验证点
- 确认
rewrite_map表中的username字段值和子域名完全一致(注意大小写、特殊字符,比如子域名是foobar,数据库里不能是Foobar) - 确保RewriteMap配置放在服务器主配置(
httpd.conf)或虚拟主机配置里,不能放在.htaccess中(dbd类型的RewriteMap不支持在.htaccess里定义)
内容的提问来源于stack exchange,提问作者Richard PB
相关产品推荐
相关产品推荐

