it-roy-ru.com

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

Пожалуйста, не рекомендуйте мне длинную и очень подробную ветку с более чем 173 ответами. Это не сработало для меня. Я также пробовал много других ( 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
  • Окно поиска бопа Тип элемента для навигационных меню
  • Контактная форма 7
  • Отключить комментарии
  • Google XML Sitemaps
  • Джетпак от WordPress.com
  • Поиск и фильтр
  • Слайдер WD
  • TablePress
  • UpdraftPlus - Резервное копирование/Восстановление
  • Wordfence Security
  • 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.

67
Cristiano Maia

Задача решена!

Финальный .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>
81
Cristiano Maia

На 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>
130
Jason Shah

Меня устраивает:

# 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
14
henrike

В моем случае файл 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> Раздел можно повторить без проблем.

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

11
Hüseyin Yağlı

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

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

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

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

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

4
Indigo

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

Почему ?: Когда 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

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

2
l2aelba

Я обнаружил, что все решения, перечисленные в этом 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
1
Steve

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

RewriteEngine On

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

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

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

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

<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
Tommykx

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

0
Rafael

Нет, если это сработало для меня. Прежде всего я должен был посмотреть на моего провайдера, чтобы увидеть, как они активируют 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
Alain ANDRE
<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
Saurabh Panchal

Вот альтернативное решение, которое вы можете использовать, если не хотите редактировать .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
Higher Coding

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

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

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

0
Raj Singh

Просто добавьте или замените этот код в вашем файле .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
Zihadul Islam