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

.htaccess重写规则实现Heroku站点域名掩码不生效排查求助

问题解答

1. 同一条规则在两个站点表现不一致的原因

  • 核心差异来自两个域名的重定向配置逻辑不同:使用URL重定向解析记录的站点,本质是注册商侧先做了一层反向代理,请求先到注册商代理节点,再转发到Heroku,你的.htaccess规则有机会被触发;而Godaddy的域名转发功能默认是301/302显性跳转,会直接返回Heroku的目标地址给浏览器,地址栏在请求到达Heroku之前就已经被修改,你的.htaccess规则根本不会被执行。
  • 另一个可能的影响因素是两个Heroku应用的Apache模块配置存在差异,比如另一个站点开启了mod_proxy模块而当前站点未开启,会导致[P]标志对应的代理规则无法生效。

2. 当前重写规则存在的错误

你的规则存在明显的逻辑错误,本身就无法触发:

  • HTTP_HOST变量仅存储请求的域名部分,不包含任何路径后缀,你写的RewriteCond %{HTTP_HOST} ^mysd.herokuapp.com/public永远不可能匹配成功,规则全程不会生效。
  • 修正后的基础规则参考(需要提前开启mod_proxy和mod_proxy_http模块):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysd\.herokuapp\.com$
RewriteRule ^public/(.*)$ https://mydomain.co/$1 [P,L]
  • 更推荐的替代方案是直接在Heroku后台绑定自定义域名mydomain.co和www.mydomain.co,配合DNS做CNAME解析到Heroku的应用地址,完全不需要写重写规则就能实现地址栏保留原域名的需求。

3. DNS设置与注册商配置的影响

该问题和DNS、注册商重定向配置直接相关:

  • 若你使用注册商的显性URL重定向:注册商直接返回3xx跳转响应,浏览器地址栏直接变更为目标地址,请求不会到达Heroku,你的重写规则完全不生效。
  • 若你使用注册商的隐性URL转发:注册商侧会做反向代理,请求先到注册商节点再转发到Heroku,你的重写规则才有机会执行。
  • 不同注册商的重定向实现逻辑差异很大,部分注册商的转发服务本身不支持传递Header或者代理逻辑存在限制,也会导致重写规则失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:03