Я хочу переписать правило, которое перенаправляет все на https://
AND www
.
Например, http://example.com
должен идтиhttps://www.example.com
Вот что у меня есть:
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L]
htaccess
apache
https
mod-rewrite
Будет
источник
источник
http://example.com
(т. Е. HTTP и без www), поскольку сначала оно будет перенаправлено на HTTPS на том же хосте (т. Е. Безwww
), а затем перенаправленоwww
в качестве второго перенаправления. Вы можете исправить это, просто изменив эти два правила.https://
перенаправлении, особенно если вы используете HSTS. Таким образом, ваши настройки HSTS могут быть сохранены браузером для обоих ваших доменов, и последующие запросы всегда будут по умолчаниюhttps://
Ваши условия неявно AND'd и ваше второе условие всегда будет истинным (если у вас нет других доменов), поэтому ваши текущие правила будут перенаправлять только трафик не-SSL.
Вам необходимо выполнить
OR
условия и отменитьwww
(второе) условие:Если значение
SERVER_PORT
не равно 443 (т. Е. Не HTTPS) или хост не запускаетсяwww.
(т. Е. Вы обращаетесь к пустому домену), тогда перенаправьте на канонический URL-адрес.Однако будет ли перенаправление
https://example.com
наhttps://www.example.com
это, зависит от вашего сертификата безопасности. (Ваш сайт должен быть доступен как через www, так и без www через SSL для перенаправления .htaccess.)источник
Это будет использоваться как для www, так и для не www
или Если вы пытаетесь открыть ссылку с не-www, то URL перенаправить на https с не-www
источник
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
наRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]