Я использую elasticbeanstalk для перенаправления HTTP-запросов на безопасный порт.
Я хочу перенаправить все свои запросы на https://example.com
.
Следующие сценарии работают
http://www.example.com
-> https://example.com
http://example.com
-> https://example.com
Тем не мение,
https://www.example.com
-> не работает и перенаправляет на https://www.example.com
Я использую следующие правила перезаписи
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
Я воспользовался помощью следующей статьи, чтобы понять вариант использования https://simonecarletti.com/blog/2016/08/redirect-domain-http-https-www-apache/
Насколько я понимаю, должно работать следующее условие
RewriteCond %{HTTP_HOST} ^www\. [NC]
Насколько я понимаю, должно работать следующее условие
RewriteCond %{HTTP_HOST} ^www\. [NC]
Да, это «работает». Однако ваш первый состояние:
RewriteCond %{HTTP:X-Forwarded-Proto} =http
гарантирует, что директива обрабатывается только для HTTP-запросов.
Если вы используете Эластичный бобовый стебель, тогда я не верю, что тебе следует проверять %{HTTPS}
в любом случае (по крайней мере, вы не необходимость to) - так как всегда будет off
. Вы можете решить свою проблему, удалив эту избыточную проверку и переместив OR
флаг к первому условию. Например:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
(В стороне: Будьте осторожны при проверке обоих %{HTTP:X-Forwarded-Proto}
и %{HTTPS}
так как это может позволить кому-то обойти ваше перенаправление, если оно не обслуживается через прокси. Если вы не обслуживаете свой контент через прокси-сервер, вам не следует проверять %{HTTP:X-Forwarded-Proto}
.)