#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/
Я бы хотел, чтобы вы сделали это
Ответ №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 Я обновил код. Очистите кэш вашего браузера и протестируйте его снова