Все страницы не перенаправляются на 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/

. синтаксис htaccess многократная перезапись на

Https://www.hostinger.com/tutorials/ssl/forcing-https

Author: user3810188, 2020-05-23

2 answers

Ваше правило перезаписи HTTPS никогда не выполняется, потому что оно выполняется после RewriteRule . /index.php [L]. Это правило соответствует всем URL-путям и является последним правилом, выполняемым для них из-за флага L.

Чтобы это правило перенаправления работало, просто переместите его в начало файла .htaccess.

WordPress сам выполняет некоторые перенаправления. Скорее всего, здесь происходит то, что перенаправление, которое вы видите, выполняется PHP-кодом WordPress, а не .htaccess.

 0
Author: Stephen Ostermiller, 2020-05-23 16:45:03

Вдохновившись ответом @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
 0
Author: user3810188, 2020-05-23 17:50:45