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

apache2下mod_rewrite非硬编码移除域名末尾固定后缀的咨询

非硬编码剥离域名固定后缀的Apache2 mod_rewrite配置实现

前置模块准备

需要确保Apache加载以下核心模块,未加载的可在主配置中启用后重启服务:

  • mod_rewrite:提供URL重写能力
  • mod_proxy、mod_proxy_http:提供反向代理能力
  • mod_headers:支持请求头自定义修改

核心配置逻辑

完全通过正则动态匹配Host名,无需预先硬编码任意前缀:

  1. 对传入请求的Host头做正则匹配,识别末尾为固定后缀.dev.example.com的请求,将后缀前的全部主机前缀捕获为动态变量
  2. 替换请求头中的Host值为捕获到的无后缀主机名
  3. 将完整请求路径、查询参数透传,代理到替换后的目标主机

完整配置示例

直接写入对应SSL/HTTP虚拟主机配置段即可:

<VirtualHost *:443>
    # 原有SSL证书配置保持不变
    SSLEngine on
    SSLCertificateFile /your/path/cert.pem
    SSLCertificateKeyFile /your/path/private.key

    # 开启重写引擎
    RewriteEngine On

    # 匹配Host末尾固定的.dev.example.com后缀,捕获前缀为动态变量(正则中所有点号必须转义)
    RewriteCond %{HTTP_HOST} ^(.+)\.dev\.example\.com$ [NC]
    # 替换请求头中的Host为捕获到的无后缀主机名
    RequestHeader set Host "%1"
    # 所有请求按捕获的主机名做代理,路径、查询参数保持原样
    RewriteRule ^/(.*)$ https://%1/$1 [P,L,QSA]

    # 保留修改后的Host头透传给后端服务
    ProxyPreserveHost On
</VirtualHost>

关键注意点

  • 正则表达式中的.dev.example.com所有点号必须加反斜杠转义,否则会被视为通用通配符,导致非预期的域名被匹配
  • 规则末尾的标记不能遗漏:
    • [NC]:忽略Host名的大小写差异,适配域名不区分大小写的特性
    • [P]:标记规则走反向代理逻辑,避免误触发302重定向
    • [L]:匹配成功后终止后续规则执行,避免重复处理
    • [QSA]:自动拼接原请求携带的查询参数,不会丢失GET请求参数
  • 该配置完全动态适配所有带固定后缀的Host,无需提前枚举可能的主机前缀,满足无法硬编码目标域名的需求
  • 正则采用贪婪匹配模式,哪怕主机名本身嵌套了该固定后缀,也只会剥离最末尾的匹配段;同时正则要求固定后缀前至少有一段内容,不会把纯dev.example.com的主机名误处理为空值,避免出现代理错误
  • 如果原本就无.dev.example.com后缀的Host请求命中该虚拟主机,不会触发重写逻辑,可根据业务需要补充对应的兜底处理规则

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 14:45:04