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

Двойная косая черта в конце обратного прокси-сервера Apache

На моем виртуальном хосте установлен обратный прокси-сервер. Однако когда я захожу на сайт: https://example.com вместо того https://example.com/ в адресной строке браузера я получаю https://example.com//. Почему у меня две косые черты в конце? Что-то не так с моим apache conf? (предоставлено ниже) или завершающая косая черта может быть добавлена ​​apache conf / .htaccess сайтом, который находится за обратным прокси-сервером?

Моя текущая настройка:

<VirtualHost *:80>
    ...
    RewriteEngine On
    RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
    ...
    ProxyRequests Off
    SSLProxyEngine on
    ProxyPass / https://example.proxy.com/
    ProxyPassReverse / https://example.proxy.com/
</VirtualHost>

когда я захожу на сайт: https://example.com вместо того https://example.com/ в адресной строке браузера я получаю https://example.com//.

Эти два запроса с косой чертой и без нее - это одно и то же. В обоих случаях браузер отправит на ваш сервер один и тот же запрос. Итак, трудно понять, почему вы получите другой ответ в этих двух случаях, если только не возникла проблема с локальным кешированием?

(См. Мой ответ на следующий вопрос в стеке Pro Webmasters для получения дополнительной информации о том, как браузер обрабатывает завершающую косую черту в домене: https://webmasters.stackexchange.com/questions/35643/is-trailing-slash-automagically-added-on-click-of-home-page-url-in-browser)

Однако RewriteRule директива в вашем <VirtualHost *:80> контейнер будет всегда приведет к двойной косой черте - возможно, вы видите кешированный ответ (или автозаполнение браузера) от этого более раннего (ошибочного) перенаправления? Обратите внимание, что 301 редирект жестко кэшируется браузером.

RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

В виртуальный хост контекст, $1 обратная ссылка будет фиксировать префикс косой черты в URL-пути (это отличается от каталог или .htaccess контекст).

Вам нужно либо убрать косую черту в замена, или уберите первую косую черту из захваченного шаблона (или используйте REQUEST_URI серверная переменная). Например:

RewriteRule ^/(.*) https://example.com/$1 [R=301,L]

(Нет необходимости в привязке конца строки, поскольку * по умолчанию жадный.)

И убедитесь, что кеш вашего браузера очищен.