【发布时间】:2019-09-18 13:20:42
【问题描述】:
我们希望 Apache HTTPD 将所有流量从 / 重定向到 /cx。
RedirectMatch 301 ^/$ "/cx"
我们希望它返回以下带有 301 响应的标头:
Location: /cx
而是返回:
Location: http://internalhostname/cx
其中http://internalhostname 是传入的Host: 请求标头包含的任何内容。
我们不希望这样,因为我们的服务器位于反向代理后面,外部客户端无法处理 http://internalhostname。这个internalhostname 当然是由反向代理添加到请求中的,但这是应该的。
为什么 httpd 会添加完整的主机名,我们如何才能阻止它?
使用UseCanonicalName Off 或UseCanonicalName On 没有区别:始终添加主机名,但使用On 它使用ServerName。
【问题讨论】:
-
为什么不
RedirectMatch 301 ^/$ "http://external.example.com/cx"? -
因为我们希望我们的应用程序在反向代理 (externaldomain.com) 之后工作并且可以直接访问/可测试 (internaldomain.com)。目前我们只能运行其中一个,因为它将两个用例重定向到同一个域。
-
任何不转发原始主机头的反向代理都应该修复包含内部主机名的重定向。
标签: apache