Apache mod_rewrite基于HTTP_HOST的规则不生效求助
解决方案
你的问题出在Rewrite规则的作用位置,以及规则变量的使用细节上。以下是具体修复步骤:
1. 调整Rewrite规则的作用范围
把域名/协议重定向规则从<Directory>块移到httpd.conf的全局配置区域(和ServerName同级,不在任何嵌套块内)。<Directory>块内的规则主要针对文件系统路径匹配,而域名、协议这类请求层面的判断,需要在全局层面才能生效。
2. 修改重定向规则
将规则里的%{SERVER_NAME}替换为明确的目标域名subd.domain.com,避免变量解析的潜在问题。修改后的全局配置片段如下:
ServerName subd.domain.com ... RewriteEngine On # 匹配非HTTPS请求,或非指定域名的请求 RewriteCond %{HTTPS} !=on [OR] RewriteCond %{HTTP_HOST} !^subd\.domain\.com$ [NC] RewriteRule ^/(.*)$ https://subd.domain.com/$1 [R=301,L]
3. 保留原认证相关配置
你原本<Directory>块内的认证和用户变量处理规则可以完全保留,这部分和重定向逻辑不冲突:
DocumentRoot "${WEBROOT}/htdocs" <Directory "${WEBROOT}/htdocs"> Options Indexes FollowSymLinks AllowOverride None AuthType SSPI NTLMAuth On NTLMAuthoritative On NTLMOmitDomain On <RequireAll> <RequireAny> Require sspi-group "DOMAIN\GROUP" </RequireAny> <RequireNone> Require user "ANONYMOUS LOGON" Require user "NT AUTHORITY\ANONYMOUS LOGON" </RequireNone> </RequireAll> RewriteEngine On RewriteCond %{LA-U:REMOTE_USER} (.+) RewriteRule . - [E=RU:%1] RequestHeader set X_ISRW_PROXY_AUTH_USER %{RU}e </Directory>
关键注意点
- 规则里的
$确保HTTP_HOST是精确匹配,避免类似subd.domain.com.xxx这类意外情况触发规则。 - 测试前一定要清除浏览器缓存,301永久重定向会被浏览器缓存,旧缓存可能导致测试结果不准确。
内容的提问来源于stack exchange,提问作者MJC
相关产品推荐
相关产品推荐

