Уменьшите количество перенаправлений без www для www http для https

#apache #.htaccess #redirect

#apache #.htaccess #перенаправление

Вопрос:

Я пытаюсь сделать мой URL без www перенаправлением на www и мой URL без https перенаправлением на https в минимально возможных перенаправлениях.

Я использую это правило

 # BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect
  

проблема в том, что это правило генерирует много перенаправлений, если я пытаюсь получить доступ к этому URL

example.com

сделайте это

http://example.com/ ==> http://www.example.com/ ==> https://www.example.com/

Я бы хотел, чтобы вы сделали это

http://example.com/ ==> https://www.example.com/

Ответ №1:

Вы можете использовать это :

 # BEGIN SSL   non www to www  Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^(?:www.)?(. )$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL   www Redirect
  

Это перенаправит как не-ssl, так и не-www на https://www в одном запросе.

Если вы не используете прокси-сервер proxy (т.Е. cloudflare ..), то вам нужно будет заменить эту строку RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] на RewriteCond %{HTTPS} off [OR] , чтобы это сработало.

Комментарии:

1. Эта строка не перезаписывает ^ https://%1 %{REQUEST_URI} [L, R= 301] работает, он перенаправляет на это: https: // _% 7Bhttp_host% 7D / поэтому я изменил из-за этого RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L, R = 301] но возникает ошибка ERR_TOO_MANY_REDIRECTS

2. Извините, произошла небольшая опечатка. Пожалуйста, ознакомьтесь с правкой и повторите попытку.

3. @BrunoAndrade Я обновил код. Очистите кэш вашего браузера и протестируйте его снова