Двойная косая черта обратного прокси 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>
1
задан 29 March 2018 в 14:56
1 ответ

при посещении сайта: 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- браузер )

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

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

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

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

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

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

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

1
ответ дан 3 December 2019 в 23:18

Теги

Похожие вопросы