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

Apache Rewrite не работает

У меня очень странная вещь происходит в моей настройке 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]

Опять же, ваша конфигурация может устанавливать какой-то другой нестандартный заголовок (или переменную среды), который вам нужно будет использовать вместо этого.