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


пожалуйста, не рекомендуйте мне длинная и очень подробная нить С более чем 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
  • Тип Элемента Окна Поиска Bop Для Навигационных Меню
  • Контактная Форма 7
  • Отключить Комментарии
  • Google XML Sitemaps
  • Jetpack by WordPress.com
  • Поиск И Фильтр
  • слайдер WD
  • TablePress
  • UpdraftPlus - Резервное Копирование/Восстановление
  • Wordfence Security
  • WPide
  • WP Smush
  • WP Супер Кэш

Edit 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

16 65

16 ответов:

на 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>

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

финал .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>

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

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

# END WordPress

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

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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

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

спасибо Джейсон Шах для аккуратных правило htaccess.

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

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

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

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

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

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

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

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

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

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

Я нашел все решения, перечисленные на этом 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).*)  [L]
RewriteRule ^(.*\.php)$  [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

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

RewriteEngine On

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

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

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

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/ [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/ [L,R=301,NC]
</IfModule>
<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/ [L,R=301]
</IfModule>

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

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

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

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

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

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTP:HTTPS} !on
   RewriteRule (.*) https://%{SERVER_NAME}/ [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';

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

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

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