HTTPS Force Redirect не работает в Wordpress
Мой каталог Wordpress находится по адресу www.example.com/blog
Недавно я изменил весь сайт, чтобы заставить HTTPS. Поэтому мой файл .htaccess в/blog/выглядит следующим образом:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Я также изменил URL сайта в настройках Wordpress на HTTPS.
Это отлично работает на домашней странице, но на любых почтовых страницах конечный пользователь может перейти на незащищенный HTTP, изменив URL-адрес и нажав клавишу ввода.
Например, они могут вводить напрямую: http://www.example.com/blog/post-1/ и он будет загружаться как HTTP.
Что не так с моим файлом .htaccess? Где свободный конец?
Ответы
Ответ 1
Измените порядок правил. Сначала перенаправляйтесь на https
, а затем пусть WP возьмет на себя все ваши запросы.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
Ответ 2
Вы также можете добавить эти две строки в wp-config.php
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
Таким образом, вы можете легко создать условия для среды http для dev и https для такой жизни:
if(strpos($_SERVER['HTTP_HOST'], 'livedomain.com') !== FALSE){
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
} else {
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
}