You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:22:30