Использовать.htaccess для перенаправления HTTP на HTTPs
пожалуйста, не рекомендуйте мне длинная и очень подробная нить С более чем 173 голоса. Это не сработало для меня. Я также пробовал много других (1,2,3, 4). Они все дают мне TOO_MANY_REDIRECTS или ошибка 500. Итак, вот мой вопрос:
С моей нынешней .htaccess, вот что происходит:
https://www.dukescasino.com/ работает отлично
https://dukescasino.com/ - перенаправляет на выше, что является большим
два варианта ниже загружаются нормально, но он должен быть перенаправлен на версию https:
вот ток .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 ответов:
на 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