Apache下mod_rewrite实现子域名URL掩码转发问题求助
解决Apache mod_rewrite实现域名掩码转发的问题
你之前规则的问题分析:
- 第一种规则:
%{HTTP_HOST}里错误添加了斜杠/,HTTP_HOST仅包含域名部分,不会带路径,导致条件匹配失败。 - 第二种规则:正则表达式写错,
^pay\.)?example\.com$多了一个右括号,匹配逻辑混乱,无法正确识别pay.example.com。 - 第三种规则:使用
R=301会触发浏览器永久重定向,直接修改地址栏URL,完全不符合“URL掩码”的需求。
正确配置步骤:
- 确认Apache模块状态:必须启用
mod_rewrite、mod_proxy、mod_proxy_http三个模块,[P]标记依赖代理模块才能实现内部转发且不修改URL。 - 调整规则顺序:把转发规则放在WordPress默认规则的最前面,避免被WordPress的规则优先拦截。
最终.htaccess配置示例:
RewriteEngine On # 实现pay.example.com的掩码转发 RewriteCond %{HTTP_HOST} ^pay\.example\.com$ [NC] RewriteRule ^(.*)$ https://newdomain.com/$1 [L,P] # 保留WordPress默认规则(原内容不动) RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
额外注意事项:
- 确保
newdomain.com的服务器配置没有限制Host头访问,否则代理请求会被拒绝。 - 如果使用HTTPS,需确保Apache配置了有效SSL证书且
mod_ssl已启用。 - 测试前清空浏览器缓存,避免旧的重定向记录干扰结果。
内容的提问来源于stack exchange,提问作者Invidia
相关产品推荐
相关产品推荐

