Перенаправление всех HTTP-запросов на HTTPS через .htaccess в WordPress

23 авг. 2016 г., 00:33:22
Просмотры: 82.7K
Голосов: 12

Я делал это много раз раньше, но по какой-то неизвестной причине сейчас у меня не получается. Перепробовал множество решений. Все, что я пытался сделать, приводит к бесконечному циклу перенаправлений.

Какой самый лучший способ это сделать?

Обновление 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]

Проверял в разных браузерах, чтобы исключить проблемы с кешированием. Все равно ничего не помогает, просто получаю постоянный цикл перенаправлений.

8
Комментарии

Попробуйте отследить редирект: http://redirectdetective.com/

jdm2112 jdm2112
23 авг. 2016 г. 00:45:16

Проверил это (обновил вопрос с дополнительной информацией) - я даже отключил кэш Google Chrome, чтобы избежать подобных проблем, http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development

Michael Cropper Michael Cropper
23 авг. 2016 г. 00:45:39

Вы пробовали наоборот? RewriteCond %{SERVER_PORT} !^433$

David David
23 авг. 2016 г. 01:10:11

С ответом, который я дал вам в вашем предыдущем вопросе, разве это не решило все ваши проблемы с HTTPS? Или вы делаете это для усиления HTTPS на всем сайте?

Ethan Rævan Ethan Rævan
23 авг. 2016 г. 01:50:55

Для того вопроса да, спасибо. Я хочу привести всё в порядок, чтобы если кто-то заходит на http-версию сайта, его автоматически перенаправляло на https с кодом 301.

Michael Cropper Michael Cropper
23 авг. 2016 г. 11:48:04

@MichaelCropper это должно автоматически обрабатываться после обновления URL домашней страницы и сайта, при условии что у вас стандартные настройки .htaccess, сгенерированные WordPress.

Ethan Rævan Ethan Rævan
23 авг. 2016 г. 16:08:36

Это странно. Похоже, что автоматический 301 редирект работает на главной странице, но не на остальных страницах сайта. Вот, например, эта страница всё ещё доступна по HTTP, http://www.michaelcropper.co.uk/contact-me/ — Тестирую на личном сайте перед тем, как внедрять повсеместно.

Michael Cropper Michael Cropper
23 авг. 2016 г. 16:20:20

Обязательно используйте @EthanJinksO'Sullivan, чтобы я получил уведомление о вашем ответе и смог быстро вам ответить. Я дам вам ответ ниже.

Ethan Rævan Ethan Rævan
23 авг. 2016 г. 19:37:54
Показать остальные 3 комментариев
Все ответы на вопрос 9
4
21

Я понимаю, когда вы вводите ссылку на вашу страницу, отличную от главной, например:

  • 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

Дайте мне знать, как всё прошло.

23 авг. 2016 г. 19:46:50
Комментарии

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

Michael Cropper Michael Cropper
24 авг. 2016 г. 12:39:57

Мне пришлось переписать код после RewriteBase .

Harish ST Harish ST
24 окт. 2018 г. 08:01:12

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

tishma tishma
20 нояб. 2018 г. 15:12:13

Как уже сказали другие комментаторы: вам необходимо вставить эти две строки сразу после RewriteBase /. В позиции, указанной в ответе, это будет работать только для главной страницы.

tanius tanius
24 сент. 2019 г. 15:06:09
0

Добавьте код в файл .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>
17 февр. 2019 г. 10:57:00
2

Вы можете установить заголовок в .htaccess

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>
11 сент. 2018 г. 16:38:21
Комментарии

Это помогло мне, в то время как ничего из вышеперечисленного не сработало.

Clain Dsilva Clain Dsilva
7 янв. 2020 г. 04:59:57

+1 У этого решения есть преимущество в том, что оно менее вероятно вызовет конфликт с существующими правилами mod_rewrite.c

Dave A-W Dave A-W
27 апр. 2020 г. 07:23:30
0

Попробуйте добавить это в ваш .htaccess:

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</IfModule>
# END WordPress
19 сент. 2018 г. 13:31:14
1

Просто добавьте это в ваш файл .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
28 мая 2018 г. 12:57:10
Комментарии

некоторое объяснение, почему этот код решит вопрос автора, всегда будет полезным

cjbj cjbj
28 мая 2018 г. 13:40:43
0

Если вы используете 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
19 июл. 2018 г. 10:33:30
0

Если вы не хотите вносить изменения в файл .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

6 нояб. 2019 г. 08:35:20
0
-1

У меня ушло 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 - это сработает. :)

30 июн. 2019 г. 01:59:14
1
-1
# НАЧАЛО Перенаправление 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
13 авг. 2019 г. 13:35:34
Комментарии

Чем ваш ответ отличается от ответа @ChrisSprague?

nmr nmr
13 авг. 2019 г. 13:49:27