【问题标题】:Apache HTTPD adding Full Hostname to Redirect - we want only pathApache HTTPD 将完整主机名添加到重定向 - 我们只需要路径
【发布时间】: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 OffUseCanonicalName On 没有区别:始终添加主机名,但使用On 它使用ServerName

【问题讨论】:

  • 为什么不RedirectMatch 301 ^/$ "http://external.example.com/cx"
  • 因为我们希望我们的应用程序在反向代理 (externaldomain.com) 之后工作并且可以直接访问/可测试 (internaldomain.com)。目前我们只能运行其中一个,因为它将两个用例重定向到同一个域。
  • 任何不转发原始主机头的反向代理都应该修复包含内部主机名的重定向。

标签: apache


【解决方案1】:

我们已通过重写 Location 标头以删除协议、主机名和端口来解决此问题:

RedirectMatch 301 ^/$ "/cx/"
Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)(:\d+)?/" "/"

【讨论】:

【解决方案2】:

尝试将您的 RedirectMatch 指令替换为:

RewriteEngine on
RewriteRule ^/$ http://%{HTTP_HOST}/cx [NC,R=301]

【讨论】:

  • HTTP_HOST 也是错误的值,因为面向客户端的反向代理将其设置为内部域名Host: internalhosname,这将导致Location: http://internalhostname/cx。当然有一种方法可以在没有主机名的情况下进行重定向。
猜你喜欢
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多