Используйте .htaccess для перенаправления HTTP на HTTP.
Пожалуйста, не рекомендуется мне длинный и очень подробный поток с более чем 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.
Ответы
Ответ 1
Проблема решена!
Заключительный .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>
Ответ 2
В 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>
Ответ 3
Это работает для меня:
# 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
Ответ 4
В моем случае файл 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>
можно повторить без проблем.
Я должен поблагодарить Джейсона Шаха за изящное правило доступа.
Ответ 5
Для вашей информации это действительно зависит от вашего хостинг-провайдера.
В моем случае (Infomaniak) ничего выше фактически не работало, и я получил бесконечный цикл перенаправления.
Правильный способ сделать это фактически объяснен на своем сайте поддержки:
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]
Итак, всегда проверяйте у своего хостинг-провайдера. Надеюсь, у них есть статья, объясняющая, как это сделать. В противном случае просто спросите поддержку.
Ответ 6
Это проверено и безопасно для использования
Почему?: Когда 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
)
Ответ 7
Я нашел, что все решения, перечисленные в этом 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
Ответ 8
Ничто из этого не помогло мне. Но эти линии решили ту же проблему на моем сайте WordPress:
RewriteEngine On
RewriteCond %{HTTP:HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Ответ 9
Самый простой способ перенаправить http на https в wordpress, чтобы изменить site_url и home из http://example.com в https://example.com. Wordpress выполнит перенаправление. (поэтому вы получаете ошибку "слишком много переадресаций", wordpress перенаправляет на http, в то время как .htaccess перенаправляет на https)
Ответ 10
Вот альтернативное решение, которое вы можете использовать, если вы не хотите редактировать .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
Ответ 11
Добавьте это в файл .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>
Ответ 12
Вышеупомянутый окончательный .htaccess и Test A, B, C, D, E не работал у меня. Я просто использовал код ниже 2 строк, и он работает на моем веб-сайте WordPress:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L]
Я не уверен, где я делал ошибку, но эта страница мне помогла.
Ответ 13
<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>
Ответ 14
Нет, если это сработало для меня. Прежде всего, мне пришлось посмотреть на моего провайдера, чтобы узнать, как они активируют 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';
Ответ 15
Просто добавьте или замените этот код в файле.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
Ответ 16
Перенаправление с http на https://www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Это будет работать точно!
Ответ 17
Просто добавьте этот код, и он будет работать как прелесть:
<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>