Принудительное HTTPS через .htaccess - застревание в цикле перенаправлений
Мой сайт WordPress находится по адресу example.com/wordpress, и мне нужно, чтобы весь контент внутри был доступен только через SSL.
Я создал правило в .htaccess для перенаправления http -> https:
RewriteEngine On
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
После реализации этого правила сайт стал недоступен, так как застрял в цикле перенаправлений.
Что я делаю неправильно?
Мой файл .htaccess WordPress:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]
</IfModule>
Это наконец-то сработало для меня. Может кто-нибудь объяснить, почему этот RewriteCond работает, когда RewriteCond %{HTTPS} off
не работает?

Не будучи экспертом по htaccess, могу сказать, что вам не хватает RewriteCond
- условия.
Проверьте, используется ли порт 80. Попробуйте это:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
ОБНОВЛЕНИЕ:
После просмотра вашего обновленного вопроса с полным .htaccess я бы сделал так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
</IfModule>
Разместив ваше условие и правило под стандартными правилами WordPress.

Добавление этого в мой .htaccess не помогло, я всё ещё сталкиваюсь с той же проблемой редиректа по циклу.

Можете скопировать ваш htaccess файл? Опубликуйте его в вопросе — я отредактирую свой ответ для новой попытки!

Попробуйте RewriteCond %{HTTPS} off
вместо условия с server_port.

Если больше ничего не помогает - попробуйте добавить RewriteEngine On
снова, перед моим обновлённым ответом!

Хм, возможно, в этом и проблема - у меня в .htaccess больше ничего нет.

Восстановил стандартный .htaccess, но проблема не исправлена. Обновил свой вопрос.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Источник https://www.godaddy.com/help/redirect-http-to-https-automatically-8828

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
или для отдельной страницы
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} directory
RewriteRule ^(.*)$ https://www.example.com/directory/$1 [R,L]
или можно добавить этот php-код в конкретный файл
if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // если запрос не защищен, перенаправляем на защищенный URL
$url = 'https://' . $_SERVER['HTTP_HOST']
. $_SERVER['REQUEST_URI'];
header('Location: ' . $url);
exit;
}
или объединить правила перезаписи WordPress с SSL..
RewriteRule ^(.*)$ https://www.example.com/directory/index\.php[R,L]

Веб-сайты, находящиеся за балансировщиками нагрузки или обратными прокси, которые поддерживают HTTP_X_FORWARDED_PROTO
, можно исправить, добавив следующий код в файл wp-config.php
, выше вызова require_once:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
или с помощью плагина
Добавьте в папку плагинов WordPress на вашем сайте, затем активируйте его в админке плагинов
<? /* Plugin Name: Установка заголовков */
if (stripos(get_option('siteurl'), 'https://') === 0) {
$_SERVER['HTTPS'] = 'on';
// добавляем JavaScript-обнаружение протокола страницы, и молимся!
add_action('wp_print_scripts', 'force_ssl_url_scheme_script');
}
function force_ssl_url_scheme_script() {
?>
<script>
if (document.location.protocol != "https:") {
document.location = document.URL.replace(/^http:/i, "https:");
}
</script>
<?php
}
Это работает следующим образом:
http://www.exmaple.com/blog/
преобразуется вhttps://www.exmaple.com/blog/
http://www.exmaple.com/
преобразуется вhttps://www.exmaple.com/
