我有一个遗留网站,用于运行Apache 2运行proxypass后面的一个旧的Apache 1.3实例的慈善机构。 当请求到达example.com时,Apache 2将其内部发送到localhost:8080,它可以正常工作。
问题:
example.com/blog/ works but example.com/blog (没有结尾的斜杠)没有。 它在Chrome中更改的url是example.com:8080/blog/ ,它不存在。
所有其他目录也是如此。
Apache 2:
<VirtualHost *:80> ServerName example.com ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
Apache 1:
NameVirtualHost *:8080 <VirtualHost *:8080> DocumentRoot /usr/www/html/ ServerName example.com RewriteEngine on RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$ RewriteRule .* - [F] </VirtualHost>
我认为一个简单的解决scheme是在虚拟主机中添加一个重写程序,但是尽pipe尝试了很多,我仍然没有取得任何成功。 我认为一个关键的问题是在斜杠不在那里的时候,错误地看example.com:8080。 如果有人能帮助我,这将是非常好的,请问我会有用的其他信息。
在configuration中我看不到ProxyPassReverse
或mod_proxy_html
指令; 缺乏ProxyPassReverse
,特别是,可能是你的问题的原因,因为后端Apache发送redirect到slashful的URL,但它的内部名称的位置:头,没有ProxyPassReverse
的前端Apache只是让这个内部URL泄漏。
mod_proxy_html
是针对等效的问题,但在HTML而不是HTTP头。 这也值得使用,除非你真的确定没有人会把一个完整的URL在HTML中(对于任何dynamic的Web应用程序,这是一个不好的select)。