У меня очень странная вещь происходит в моей настройке apache2. Я просто хочу перенаправить HTTP на HTTPS. Я перепробовал все возможные способы, например:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Я положил это в /etc/apache2/apache2.conf
но это просто не сработало.
Затем я вставил это в <VirtualHost *:80>
и это работает, но вместо этого я получаю
Эта страница не работает
kanzan.se слишком много раз перенаправлял вас.
Это потому, что я использую порт 80 за кеш-сервером (Varnish), а перед ним я использую <VirtualHost *:443>
. Все работает нормально, кроме этого.
У меня даже была эта проблема до того, как я поместил туда Varnish, но потом я мог решить ее, переписав в <VirtualHost *:80>
так как это сработало.
Почему-то Apache не заботится о своем основном файле конфигурации /etc/apache2/apache2.conf
?
Я положил это в
/etc/apache2/apache2.conf
но это просто не сработало.
Если под этим вы имеете в виду, что помещаете директивы прямо на сервер, в сервер context, то директивы ничего не сделают, если у вас есть директивы mod_rewrite в <VirtualHost>
доступ. Вам нужно будет включить наследование mod_rewrite (но вы можете не захотеть этого делать).
Если вы находитесь за прокси-сервером, который управляет вашим SSL, тогда ваш сервер приложений всегда обслуживает контент через порт 80, поэтому HTTPS
переменная сервера никогда не бывает on
- отсюда и ваш цикл перенаправления.
Однако прокси-сервер должен установить X-Forwarded-Proto
заголовок запроса, указывающий (для вашего сервера приложений), какой протокол используется. например. Либо http
или https
. Итак, вы, вероятно, могли бы изменить свою директиву, чтобы вместо этого читать следующее:
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$ [NC]
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Опять же, ваша конфигурация может устанавливать какой-то другой нестандартный заголовок (или переменную среды), который вам нужно будет использовать вместо этого.