我们希望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
。
我们通过重写 Location 标头来删除 prototcol、主机名和端口来解决此问题:
RedirectMatch 301 ^/$ "/cx/"
Header edit Location "(^http[s]?://)([a-zA-Z0-9.-]+)(:d+)?/" "/"
尝试将RedirectMatch
指令替换为:
RewriteEngine on
RewriteRule ^/$ http://%{HTTP_HOST}/cx [NC,R=301]