Перенаправление всех HTTP-запросов на HTTPS через .htaccess в WordPress
Я делал это много раз раньше, но по какой-то неизвестной причине сейчас у меня не получается. Перепробовал множество решений. Все, что я пытался сделать, приводит к бесконечному циклу перенаправлений.
Какой самый лучший способ это сделать?
Обновление 1 Вот несколько вариантов, которые я попробовал:
RewriteCond %{HTTP_HOST} ^website\.co\.uk [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.website.co.uk/$1 [R,L]
И:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.website.co.uk$1 [R,L]
Проверял в разных браузерах, чтобы исключить проблемы с кешированием. Все равно ничего не помогает, просто получаю постоянный цикл перенаправлений.
Я понимаю, когда вы вводите ссылку на вашу страницу, отличную от главной, например:
http://www.michaelcropper.co.uk/contact-me
www.michaelcropper.co.uk/contact-me
michaelcropper.co.uk/contact-me
Если префикс https://
отсутствует, загружается HTTP-ссылка. Добавьте следующее в ваш файл .htaccess
между тегами <IfModule mod_rewrite.c>
:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
Если в ваш .htaccess
не вносились дополнительные изменения, он должен выглядеть следующим образом:
# 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]
# Перенаправление HTTP на HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END WordPress
Дайте мне знать, как всё прошло.

Спасибо @EthanJinksO'Sullivan, это сработало. Как ни странно, я нашел еще одну конфигурацию, где это работало, которая была очень похожа на изначальную, протестированную мной, и она тоже работала сегодня утром: RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.michaelcropper.co.uk/$1 [R=301,L]
- Исходя из этого, можно предположить, что где-то что-то кэшировалось. Кто знает наверняка.

У меня не сработало - правила https, похоже, должны быть прописаны раньше, чтобы работать и с внутренними страницами.

Добавьте код в файл .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Просто добавьте это в ваш файл .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Если вы используете W3 Total Cache, ответ от @Ethan Jinks O'Sullivan будет работать только в том случае, если вы разместите редирект перед модификациями W3 Total Cache в файле .htaccess, как показано ниже
#BEGIN Rewrite HTTP to HTTPS
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
#END Rewrite HTTP to HTTPS
# BEGIN GZIP COMPRESSION
...
# END GZIP COMPRESSION
# BEGIN DEFLATE COMPRESSION
...
# END DEFLATE COMPRESSION
# BEGIN W3TC Browser Cache
...
# END W3TC Browser Cache
# BEGIN W3TC Page Cache core
...
# END W3TC Page Cache core
# 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>
# END WordPress

Если вы не хотите вносить изменения в файл .htaccess, вы можете попробовать этот вариант:
add_action('template_redirect', 'redirect_core', 50);
add_action('init', 'redirect_core', 50);
add_action('wp_loaded', 'redirect_core', 50);
function redirect_core(){
if (!is_ssl()) {
wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
exit();
}
}
Или попробуйте этот плагин: HTTPS Redirect

У меня ушло 10 минут на решение проблемы
Добавьте конфигурационный файл для вашего домена.
Перейдите в CentOS 7 в директорию /etc/httpd/conf.d/
, затем создайте конфигурационный файл с именем anything.conf
.
Поместите в него следующий код:
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin webmaster@domain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
Замените example.com
на ваш домен.
Затем добавьте код переадресации на https в файл .htaccess - это сработает. :)

# НАЧАЛО Перенаправление HTTP на HTTPS
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# КОНЕЦ Перенаправление HTTP на HTTPS
# НАЧАЛО 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>
# КОНЕЦ WordPress
