Apache proxypass 尾部斜杠 / 目录问题

Apache proxypass 尾部斜杠 / 目录问题

我有一个慈善机构的旧网站,运行在旧的 Apache 1.3 实例上,后面是运行 proxypass 的 Apache 2。当请求到达 example.com 时,Apache 2 会将其内部发送到 localhost:8080,这样就可以正常工作。

问题:

example.com/blog/有效,但是example.com/blog(没有尾部斜杠)则不会。它在 Chrome 中更改为的 URL 是例如.com:8080/blog/但它并不存在。

对于所有其他目录来说也是如此。

阿帕奇 2:

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

阿帕奇 1:

NameVirtualHost *:8080
<VirtualHost *:8080>
    DocumentRoot /usr/www/html/
    ServerName example.com
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
    RewriteRule .* - [F]
</VirtualHost>

我认为一个简单的解决方案是在任一虚拟主机中添加重写规则,但尽管尝试了很多次,我还是没有成功。我认为一个关键问题是当没有斜线时,它会错误地查找 example.com:8080。如果有人能帮助我,那就太好了,问我任何有用的附加信息。

答案1

我没有在您的配置中看到ProxyPassReversemod_proxy_html指令;具体来说,缺少ProxyPassReverse很可能是导致问题的原因,因为后端 Apache 正在向斜线 URL 发送重定向,但在 Location: 标头中具有其内部名称,而没有ProxyPassReverse前端 Apache 只会让该内部 URL 泄漏。

mod_proxy_html用于处理相同的问题,但使用 HTML 而不是 HTTP 标头。除非您真的确保没有人会在 HTML 中放置完整的 URL(对于任何动态 Web 应用程序来说,这都是一个糟糕的选择)。

相关内容