2016-11-05 3 views
1

Я запускаю сервер apache за порталом https и имею проблему с перенаправлением каталога. Мой сервер apache - контейнер докеров, который получает запросы, отправленные контейнером портала https (steveltn/https-portal). Все работает нормально, за исключением перенаправления http по умолчанию, которые сделаны для http вместо https. Например, скажем, у нас есть каталог с именем test на моем веб-сайте apache. Вызов https://example.com/test возвращает код 301 с перенаправлением на http://example.com/test/. Правильное поведение было бы перенаправлением на https.Apache-каталог, связанный с чертой слэш, за https

Сначала я подумал, что это была неправильная конфигурация моего портала https, и попросил команду steveltn/https-portal. Но они ответили, что это проблема в моей конфигурации apache (https://github.com/SteveLTN/https-portal/issues/67#issuecomment-257934618). Резюме ответа является

PORTAL делает говорить Apache о его существовании по запросу заголовок X-Forwarded-Proto: протокол HTTPS. Некоторые веб-приложения автоматически распознают этот заголовок , например WordPress. Я думаю, теперь это до вас, чтобы настроить веб-приложение, чтобы признать этот заголовок

Я пробовал много конфигурации найденной в сети Интернет, например, это одно, но никто не решает проблему:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
</VirtualHost> 

Если я изменю RewriteCond на% {HTTP: X-Forwarded-Proto} https, я получаю бесконечный цикл перенаправления.

Любая идея?

ответ

1

После работы над Gerfried предложение здесь решение я использую.

RewriteEngine On 
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteCond %{HTTP:X-Forwarded-Proto} https 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

Он работает в следующих ситуациях:

  • запрос в каталог -> HTTPS перенаправлять
  • запрос на существующий файл -> служит файл
  • Запрос недостающего ресурса -> Ошибка http 404.
1

Возможно, у вас есть файл .htaccess, который вызывает перенаправление?

Если проблема действительно вызвана конфиге выше, вы можете попробовать следующее:

RewriteEngine On 

# add a trailing slash to all directories 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

## redirect to https 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
+0

Спасибо, что указал мне в правильном направлении. Проблема с этим решением - запрос на недостающие ресурсы также перенаправляется. Я обновляю свой вопрос с помощью решения, которое я построил на вашем предложении. –

Смежные вопросы