Используйте .htaccess для перенаправления HTTP на HTTP

70

Пожалуйста, не рекомендуется мне длинный и очень подробный поток с более чем 173 upvotes. Это не сработало для меня. Я также пробовал много других (1, 2, 3, 4). Все они дают мне TOO_MANY_REDIRECTS или ошибку 500. Итак, вот моя проблема:

С моим текущим .htaccess, это то, что происходит:

https://www.dukescasino.com/ - отлично работает

https://dukescasino.com/ - перенаправляет на описанное выше замечательное

Два параметра ниже загружаются нормально, но он должен быть перенаправлен на версию https:

http://www.dukescasino.com/

http://dukescasino.com/

Вот текущий .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Я не считаю, что это актуально, но если это так, вот список текущих активных плагинов:

  • Дополнительные пользовательские поля
  • Все в одном пакете SEO
  • Bop Search Box Тип элемента для навигационных меню
  • Контактная форма 7
  • Отключить комментарии
  • Google XML Sitemaps
  • Jetpack by WordPress.com
  • Поиск и фильтрация
  • Ползунок WD
  • TablePress
  • UpdraftPlus - Резервное копирование/восстановление
  • Безопасность Wordfence
  • WPide
  • WP Smush
  • WP Super Cache

Изменить 1 - Выполненные тесты:

Тест A:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{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>

Результат: ERR_TOO_MANY_REDIRECTS

Тест B:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Результат: ERR_TOO_MANY_REDIRECTS

Тест C:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{SERVER_PORT} ^80$
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Результат: ERR_TOO_MANY_REDIRECTS

Тест D:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Результат: ERR_TOO_MANY_REDIRECTS

Тест E:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Результат: найдено 302. Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка 500 Internal Server Error.

  • 0
    Может быть, просто опечатка, но вы написали .htaccess неправильно (так же) 3 раза? Ваш текущий файл .htaccess неполон, у вас отсутствует RewriteEngine On . Предположительно, когда вы добавляете каноническое перенаправление, вы добавляете это в самый верх вашего файла .htaccess? Вы заявляете, что https://example.com перенаправляет ОК, однако это не указано в вашем файле конфигурации? Где / как это происходит? Было бы полезно узнать, что вы на самом деле пытались - это не работает.
  • 0
    Извините, .htaccess был опечаткой, я исправил это сейчас. Я также обновил текущий код .htaccess и весь тест, который я провел с результатами каждого. Я не знаю, как https без www перенаправляет на версию www, хотя. Спасибо
Показать ещё 2 комментария
Теги:
.htaccess
redirect
http
https

16 ответов

81
Лучший ответ

Проблема решена!

Заключительный .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
  • 19
    В результате этого изменения «[www.domain.com] перенаправлял вас слишком много раз» для домена, который я размещаю на Dreamhost. Неудачно. Однако это сработало: RewriteCond% {HTTPS}! = On RewriteRule ^ https: //% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]
  • 0
    Это дало мне too many redirects на Godaddy.
Показать ещё 9 комментариев
127

В Dreamhost это сработало:

<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>
  • 7
    Это работало и на обычном сервере, отличном от Dreamhost.
  • 1
    Этот работает для меня на общем хостинге namecheap.
Показать ещё 10 комментариев
14

Это работает для меня:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on           
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
  • 0
    это работает для меня
11

В моем случае файл htaccess содержал множество правил, установленных плагинами, такими как Far Future Expiration и WPSuperCache, а также строки из самого wordpress.

Чтобы не испортить вещи, мне пришлось поставить решение на вершину htaccess (это важно, если вы поставите его в конце, это вызовет некоторые неправильные перенаправления из-за конфликтов с плагином кеша)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Таким образом, ваши строки не будут испорчены WordPress в случае изменения некоторых настроек. Кроме того, раздел <IfModule> можно повторить без проблем.

Я должен поблагодарить Джейсона Шаха за изящное правило доступа.

  • 0
    Это важная информация. Спасибо за публикацию!
4

Для вашей информации это действительно зависит от вашего хостинг-провайдера.

В моем случае (Infomaniak) ничего выше фактически не работало, и я получил бесконечный цикл перенаправления.

Правильный способ сделать это фактически объяснен на своем сайте поддержки:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]

Итак, всегда проверяйте у своего хостинг-провайдера. Надеюсь, у них есть статья, объясняющая, как это сделать. В противном случае просто спросите поддержку.

2

Это проверено и безопасно для использования

Почему?: Когда Wordpress редактирует ваши правила перезаписи, убедитесь, что ваше правило HTTPS не должно быть удалено ! так что это не противоречит родным правилам Wordpress.

<IfModule mod_rewrite.c>
   RewriteCond %{HTTPS} !=on
   RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
  #Your our Wordpress rewrite rules...
</IfModule>
# END WordPress

Примечание. Вы должны изменить URL- адреса адреса и адреса адреса WordPress на https:// в общих настройках (wp-admin/options-general.php)

  • 0
    Часть WordPress должна идти после HTTPS, иначе она не будет работать. Или, по крайней мере, это то, что случилось со мной :)
  • 0
    Спасибо за информацию!
Показать ещё 2 комментария
1

Ничто из этого не помогло мне. Но эти линии решили ту же проблему на моем сайте WordPress:

RewriteEngine On

RewriteCond %{HTTP:HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
1

Я нашел, что все решения, перечисленные в этом Q & A, к сожалению не работали для меня. Что было сделано:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress

Примечание. Вышеупомянутые правила Wordpress предназначены для Wordpress в многопользовательском сетевом режиме. Если ваш Wordpress находится в режиме одного сайта, вы должны использовать:

# 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]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress
0

Просто добавьте или замените этот код в файле.htaccess в wordpress

# 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
0

Нет, если это сработало для меня. Прежде всего, мне пришлось посмотреть на моего провайдера, чтобы узнать, как они активируют SSL в .htaccess мой провайдер.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTP:HTTPS} !on
   RewriteRule (.*) https://%{SERVER_NAME}/$1 [QSA,L,R=301]
</IfModule>

Но мне потребовались дни исследований, поэтому мне пришлось добавить в wp-config.php следующие строки, поскольку мой предоставленный сайт находится за прокси-сервером:

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
0

Самый простой способ перенаправить http на https в wordpress, чтобы изменить site_url и home из http://example.com в https://example.com. Wordpress выполнит перенаправление. (поэтому вы получаете ошибку "слишком много переадресаций", wordpress перенаправляет на http, в то время как .htaccess перенаправляет на https)

  • 0
    Я не уверен, что это делает перенаправление для SEO :)
  • 1
    конечно, это так. перенаправление 301 (постоянное), Google будет переиндексировать
Показать ещё 2 комментария
0
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^digitalsoftwaremarket.com [NC]
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301]
</IfModule>
0

Вышеупомянутый окончательный .htaccess и Test A, B, C, D, E не работал у меня. Я просто использовал код ниже 2 строк, и он работает на моем веб-сайте WordPress:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L]

Я не уверен, где я делал ошибку, но эта страница мне помогла.

0

Добавьте это в файл .htaccess WordPress:

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]

Поэтому файл .htaccess по умолчанию WordPress должен выглядеть следующим образом:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]
</IfModule>
0

Просто добавьте этот код, и он будет работать как прелесть:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
</IfModule>
0

Вот альтернативное решение, которое вы можете использовать, если вы не хотите редактировать .htaccess:

add_action( 'template_redirect', 'nonhttps_template_redirect', 1 );

function nonhttps_template_redirect() {

    if ( is_ssl() ) {

        if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'https' ) ) {

            wp_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ), 301 );

            exit();

        } else {

            wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );

            exit();

        }

    }

}

Вы можете поместить это в нижней части своей темы functions.php

  • 0
    Знаете ли вы, как это влияет на индексацию Google?
  • 0
    Пока не совсем уверен, я думаю, что он останется таким же, в зависимости от причины, по которой Google может индексировать его как версию HTTPS для начала.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню