带有或不带有尾部斜杠的代理请求

带有或不带有尾部斜杠的代理请求

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

相关内容