Все страницы не перенаправляются на HTTPS при доступе по протоколу HTTP
Я веду блог Wordpress, в котором есть проблема с перенаправлением HTTPS. Кроме домашней страницы, никакой другой URL-адрес не перенаправляется на HTTPS, если вы посещаете его по HTTP.
Я хочу перенаправить весь HTTP-трафик на HTTPS. В настоящее время доступна только домашняя страница (http://www.example.com ) перенаправляется на HTTPS, если вы попытаетесь использовать HTTP.
Но если вы посетите http://www.example.com/page1 , то он не будет перенаправлен на HTTPS и останется на HTTP.
Я не хотите использовать любой плагин, такой как "действительно простой SSL". После небольшого поиска по сети я обнаружил, что могу изменить файл .htaccess
для этого. Затем я попытался понять файл .htaccess (учитывая, что я никогда раньше не работал с PHP, WordPress или даже Apache). Я узнал, что RewriteEngine On
должен появляться в вашем файле только один раз, но в моем случае он появляется дважды. возможно, какой-то плагин или тема изменили это, о чем я не знаю. ниже приведено содержимое моего файла.htaccess.
# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 24 hours"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/gif "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "access plus 24 hours"
ExpiresByType application/pdf "access plus 1 week"
ExpiresByType text/javascript "access plus 24 hours"
ExpiresByType text/html "access plus 5 minutes"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 24 hours"
</IfModule>
<ifModule mod_headers.c>
Header set X-Endurance-Cache-Level "2"
</ifModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Я у вас нет никаких поддоменов. только один домен. Поэтому, чтобы развеять мои сомнения, у меня есть два вопроса.
1) Этот файл .htaccess правильный? Я имею в виду, можем ли мы иметь две строки RewriteEngine On
? это тоже за пределами, опять же, я не очень хорошо знаком с этим синтаксисом.
2) Что я должен изменить, чтобы отразить перенаправление HTTPS на всех моих страницах?
Более того, он также нарушил перенаправление с Не-WWW на WWW.
PS: это одна из ссылок, которые у меня есть посещенный-
Https://wordpress.org/support/article/htaccess/
2 answers
Ваше правило перезаписи HTTPS никогда не выполняется, потому что оно выполняется после RewriteRule . /index.php [L]
. Это правило соответствует всем URL-путям и является последним правилом, выполняемым для них из-за флага L
.
Чтобы это правило перенаправления работало, просто переместите его в начало файла .htaccess.
WordPress сам выполняет некоторые перенаправления. Скорее всего, здесь происходит то, что перенаправление, которое вы видите, выполняется PHP-кодом WordPress, а не .htaccess.
Вдохновившись ответом @Stephen, я решил его, переместив последние 3 строки непосредственно перед блоком mod_rewrite
.
# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 24 hours"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/gif "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "access plus 24 hours"
ExpiresByType application/pdf "access plus 1 week"
ExpiresByType text/javascript "access plus 24 hours"
ExpiresByType text/html "access plus 5 minutes"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 24 hours"
</IfModule>
<ifModule mod_headers.c>
Header set X-Endurance-Cache-Level "2"
</ifModule>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress