На моем виртуальном хосте установлен обратный прокси-сервер. Однако когда я захожу на сайт: 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]
(Нет необходимости в привязке конца строки, поскольку *
по умолчанию жадный.)
И убедитесь, что кеш вашего браузера очищен.