http://www.example.org/foo/
我正在尝试将(带有尾随斜杠)和(不带有尾随斜杠)代理http://www.example.org/foo
到本地后端服务器上的同一个 URL。
我想出了以下解决方案,它确实有效:
ProxyRequests Off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
# Request URL without trailing slash
<Location "/foo">
ProxyPreserveHost On
ProxyPass http://127.0.0.1:64508/foo/
ProxyPassReverse http://127.0.0.1:64508/foo/
</Location>
# Request URL with trailing slash
<Location "/foo/">
ProxyPreserveHost On
ProxyPass http://127.0.0.1:64508/foo/
ProxyPassReverse http://127.0.0.1:64508/foo/
</Location>
但是,使用两个<Location>
块似乎有些多余。此外,我注意到在交换两个<Location>
块之后,解决方案不再起作用(要么 CSS/JS 无法加载,要么客户端抱怨页面没有正确重定向)。有没有更正确的方法可以达到上述目的?
答案1
您只需要一个位置块
<Location "/foo">
ProxyPreserveHost On
ProxyPass http://127.0.0.1:64508/foo
ProxyPassReverse http://127.0.0.1:64508/foo
</Location>
这将匹配/foo
其后的所有内容,包括/foo/
。
您ProxyPass
始终需要确保两个参数/foo/
->/foo/
和/foo
->中的尾部斜杠匹配/foo
。