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

配置全局Rewrite规则:仅根目录请求时重定向子域名

解决方案

以下是符合你需求的全局Rewrite规则,既能实现仅根目录触发重定向,适配所有域名层级,同时确保mta-sts子域名下的必要文件可正常访问:

RewriteEngine On

# 排除mta-sts子域名下的非根目录请求(允许访问必要配置文件)
RewriteCond %{HTTP_HOST} ^mta-sts\.(.+)$ [NC]
RewriteCond %{REQUEST_URI} !^/?$
RewriteRule ^ - [L]

# 仅根目录请求时,移除开头的www/mail/mta-sts前缀并重定向
RewriteCond %{HTTP_HOST} ^(www|mail|mta-sts)\.(.+)$ [NC]
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^ %{REQUEST_SCHEME}://%2/ [L,R=301]

规则说明

  • 仅根目录触发:通过RewriteCond %{REQUEST_URI} ^/?$限定只有访问/(或空路径,兼容不同Apache配置逻辑)时才执行重定向,非根目录请求不会被处理。
  • 适配所有域名层级:用^(www|mail|mta-sts)\.(.+)$正则匹配,不管是www.domain.tld、www.sub.domain.tld还是mail.sub.sub.domain.tld,都能精准捕获去掉前缀后的完整域名到%2变量,无需针对不同层级单独写规则。
  • mta-sts特殊处理:优先添加例外规则,当请求mta-sts子域名的非根目录路径时,直接跳过后续重定向逻辑,确保mta-sts.domain.tld/.well-known/mta-sts.txt这类邮件服务必要文件可正常访问。
  • 自动适配协议:用%{REQUEST_SCHEME}自动使用请求的HTTP/HTTPS协议,避免硬写协议导致的混合内容问题。

你现有规则的问题

  1. 匹配范围过宽:你的RewriteRule ^/?(.*)$会匹配所有请求路径,导致非根目录的页面也被错误重定向,这是无法限定仅根目录触发的核心原因。
  2. 域名层级限制:分两层、三层域名的写法通用性差,遇到四层及以上子域名时规则会直接失效。
  3. mta-sts无例外处理:没有针对mta-sts子域名的文件请求做排除,会导致该子域名下的必要配置文件被重定向,影响邮件服务的MTA-STS功能正常运行。

注意事项

  • 在cPanel中,全局规则需要放在全局Apache配置的Rewrite区域,比如/etc/apache2/conf.d/includes/pre_virtualhost_global.conf(具体路径可参考cPanel全局配置文档),新增域名时会自动继承该规则,无需重复配置。
  • 测试前请清空浏览器缓存,因为301是永久重定向,浏览器会缓存旧的重定向记录,影响测试结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:28:21