Ошибка .htaccess - ERR_TOO_MANY_REDIRECTS

У меня есть файл .htaccess для перенаправления http:// на https://
Я также сделал www. перенаправление на корневой домен!
www. в корневой домен работает! однако https:// перенаправление не работает! Если я установил RewriteCond %{HTTPS} on на RewriteCond %{HTTPS} off или RewriteCond %{HTTPS} =!on, я получаю сообщение об ошибке браузера:

Страница example.com не работает

mysite.com слишком много раз перенаправлял вас.

Попробуйте очистить файлы cookie.

ERR_TOO_MANY_REDIRECTS


Одно изменение, которое я сделал, дало мне ошибку 500, но я вернулся к тому, как было раньше! все, что я сделал, это изменил: RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} на RewriteRule(.*) https://%{HTTP_HOST}%{REQUEST_URI} или RewriteRule (.*)https://%{HTTP_HOST}%{REQUEST_URI}

У кого-нибудь есть идеи, как решить эту проблему?

Это весь мой .htaccess файл!

<IfModule mod_rewrite.c>
 RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTPS} on          [OR]
RewriteCond %{HTTP_HOST} ^www\.   [NC]
RewriteRule ^ https://antimalwareprogram.co%{REQUEST_URI}     [R=301,L,NE]
</IfModule>

person Community    schedule 06.09.2017    source источник
comment
В вашем последнем редактировании вы изменили на RewriteEngine off - это было намеренно?   -  person MrWhite    schedule 07.09.2017
comment
Я не добавлял намеренно, чтобы он был включен, я пробовал его перед тем, как изменить, прежде чем отправлять извините   -  person    schedule 07.09.2017
comment
(В сторону: Просто если вы установите RewriteEngine off, тогда код просто ничего не будет делать - это просто полностью отключает механизм перезаписи. Похоже, вы, возможно, хотели вместо этого изменить RewriteCond %{HTTPS} on на RewriteCond %{HTTPS} off?)   -  person MrWhite    schedule 07.09.2017


Ответы (1)


RewriteCond %{HTTPS} on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Да, это создаст цикл перенаправления. Логика неверна. Это говорит о том, что ... если HTTPS включен, перенаправляйте на HTTPS. Вы должны проверить, выключен ли HTTPS (или не включен, т. Е. !on).

(Удалив пробелы между аргументами, вы, вероятно, создали цикл перезаписи, отсюда и возникла ошибка 500. Пробелы являются разделителями в файлах конфигурации Apache.)

Вместо этого попробуйте что-нибудь вроде следующего:

RewriteEngine On
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L,NE]

Это обрабатывает как канонические перенаправления HTTPS, так и www. Вам не нужно первое правило. Вам также не нужен <IfModule> контейнер.

Меняйте 302 на 301 только в том случае, если вы уверены, что все работает нормально.

Перед тестированием убедитесь, что вы очистили кеш браузера. 301-е файлы жестко кешируются браузером.


ОБНОВЛЕНИЕ: Если это по-прежнему вызывает ту же ошибку (цикл перенаправления), возможно, вашим SSL управляет интерфейсный прокси, а не сервер приложений. В этом случае вы не сможете использовать серверную переменную HTTPS. См. Эти связанные вопросы:


Похоже, что в этом случае ENV:HTTPS (переменная среды) необходимо использовать вместо HTTPS (переменная сервера Apache). Обратите внимание, однако, что это нестандартно для конкретного сервера, так как подразумевает, что для управления SSL используется интерфейсный прокси.

person MrWhite    schedule 06.09.2017
comment
Я исправил это с помощью: RewriteCond %{ENV:HTTPS} !=on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] Я добавил ENV:HTTPS Пожалуйста, проголосуйте за этот вопрос, если это все еще хороший вопрос, я не приму ваш ответ и все равно проголосую за вас! - person ; 07.09.2017
comment
Спасибо за ответ. Если вам нужно было использовать ENV:HTTPS, это означает, что у вас есть какой-то интерфейсный прокси / сервер, который управляет сертификатом SSL. HTTPS (без ENV:) относится к переменной сервера, управляемой Apache, тогда как ENV:HTTPS ссылается на нестандартную переменную среды (в отличие от переменной сервера ) с тем же именем - это будет установлено сторонним модулем. Между прочим, !on и !=on в данном случае фактически одно и то же. !on проверяет, не содержится ли on в TestString, тогда как !=on проверяет на неравенство. - person MrWhite; 07.09.2017
comment
Еще раз спасибо, я вообще не думаю, что смог бы исправить это без вашей помощи! - person ; 07.09.2017
comment
Мне также пришлось использовать решение @ user8529958 (в их комментарии выше). Веб-хостингом были Network Solutions для всех, кто сталкивался с этой проблемой с ними. - person thargenediad; 18.07.2019