text / x-generic .htaccess (текст в кодировке Unicode UTF-8)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Один из моих инструментов оптимизации показывает, что у меня есть несколько перенаправлений для www (HTTP), то есть с HTTP на HTTPS и снова с HTTPS на HTTPS. Как это исправить?
... это HTTP на HTTPS и снова HTTPS на HTTPS
В частности, на вашем снимке экрана вы видите два перенаправления при запросе HTTP и www (т.е. http://www.example.com
):
http://www.example.com
к https://www.example.com
(HTTP в HTTPS)https://www.example.com
к https://example.com
(с www на без www)№ 1 запускается вашим .htaccess
Правило и номер 2, без сомнения, запускается самим WordPress в PHP.
Эта серия перенаправлений действительно необходима, если вы когда-нибудь планируете реализовать HSTS (несмотря на то, что сообщает ваш "инструмент оптимизации").
В противном случае вы можете избежать двойного перенаправления, канонизируя имя хоста в .htaccess
, перед WordPress делает это. Один из способов - добавить дополнительное правило перед существующее перенаправление HTTP на HTTPS. Например:
RewriteEngine On
# www to non-www (and HTTPS)
RewriteCond %{HTTP_HOST} ^www\.([a-z.]+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
# HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
В %1
в RewriteRule
замена это обратная ссылка на первую захваченную группу в последнем совпавшем CondPattern. Другими словами, имя хоста меньше любого www.
префикс (и любая конечная точка в случае FQDN).
Обратите внимание, что перенаправление с www на не-www также перенаправляется на HTTPS. Таким образом, это гарантирует, что следующий HTTP на HTTPS никогда не будет обрабатываться при первом перенаправлении (поэтому нет второго перенаправления).
Перед тестированием убедитесь, что вы очистили кеш браузера. (Чтобы избежать проблем с кешированием, часто предпочтительнее сначала протестировать 302 - временные перенаправления.)
Если я понимаю вашу проблему, вам следует удалить www
из {HTTP_HOST}
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
следует изменить на
RewriteCond %{HTTP_HOST} ^www\.([a-z.]+)$ [NC]<br>
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Надеюсь, это поможет тебе.