Назад | Перейти на главную страницу

Проблема с завершающей косой чертой / каталогом прокси-сервера Apache

У меня есть устаревший сайт для благотворительности, работающий на старом экземпляре Apache 1.3, за Apache 2 с запущенным proxypass. Когда запрос приходит на example.com, Apache 2 отправляет его внутренне на localhost: 8080, который отлично работает.

Эта проблема:

example.com/blog/ работает, но example.com/blog (без косой черты в конце) нет. URL-адрес, на который он изменяется в Chrome, - example.com:8080/blog/ которого не существует.

То же верно и для всех остальных каталогов.

Apache 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>

Я думал, что простым решением будет добавить rewriterule в любой из виртуальных хостов, но я не добился успеха, несмотря на многие попытки. Я думаю, что ключевой проблемой является неправильный поиск example.com:8080 без косой черты. Было бы здорово, если бы кто-нибудь мог мне помочь, задавал мне дополнительную информацию, которая была бы полезна.

Я не вижу ProxyPassReverse или mod_proxy_html директивы в вашем конфиге; отсутствие ProxyPassReverse, в частности, скорее всего, будет причиной вашей проблемы, поскольку серверная часть Apache отправляет перенаправление на URL-адрес с косой чертой, но имеет внутреннее имя в заголовке Location: и без ProxyPassReverse внешний интерфейс Apache просто допускает утечку внутреннего URL-адреса.

mod_proxy_html предназначен для эквивалентных проблем, но в HTML, а не в заголовках HTTP. Также стоит использовать, если вы не действительно конечно, никто не будет помещать полный URL-адрес в HTML (что для любого динамического веб-приложения - плохая ставка).