Правильно принудительно использовать SSL на wordpress через wp-config.php


Если я отредактирую wp-config.php, я должен добавить:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Однако на моем веб-сайте есть .htaccess правила для принудительного использования https и www на всем веб-сайте:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} ^website.com
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301]

Я знаю, что есть и другие доступные переписчики, но опять же не уверен, какой из них правильный.

Какой из следующих 3 я должен использовать в wp-config.php

1 - Без isset(), с фигурными скобками, с server_port

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

2 - Без фигурных скобок и без server_port?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

3 - Нужны ли фигурные скобки/лучше или "правильнее" и требуется ли server_port?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

Я нашел несколько других немного отличающихся вариантов этого по всему Интернету, касающихся SSL wordpress, но я не могу понять, какой из них правильный/основной...

Author: Ryflex, 2015-08-08

3 answers

PHP-код в таком случае вообще не должен иметь дело с SSL. Здесь применяется классический принцип SoC: если ваш код явно не работает с подключением (в WP это не так), вы должны оставить проверку протокола на веб-сервере.

Вам также следует избегать определения порта в ваших правилах перезаписи. Если вы не используете многоузловую настройку WP, вы можете попробовать:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
 10
Author: Evgeny Soynov, 2015-09-07 20:47:22

Я использовал этот. что вполне нормально для продолжения.

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
   $_SERVER['HTTPS']='on';

Если порт вашего сервера отличается от 443. вы можете указать его. В противном случае нет необходимости использовать его еще раз.

 4
Author: , 2015-09-07 03:59:01

Исправлены правила.htaccess (, как подробно описано в wiki.apache.org):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]

Обычно ваши примеры кода (1,2,3) не нужны в Wordpress, но похоже, что у вас есть какой-то прокси, основанный на вопросе.

  1. Нехорошо Сгенерирует предупреждение PHP (стандартная конфигурация php), если HTTP_X_FORWARDED_PROTO не задан веб-сервером.
  2. Хорошо Проверяет, существует ли переменная, прежде чем проверять значение. Не генерирует никаких предупреждения.
  3. ХорошийЛучший**

** Как правило, изменение переменных _SERVER (например, SERVER_PORT и HTTPS) не рекомендуется, если у вас нет не очень распространенной настройки (т. Е. за прокси - что является единственной причиной для любого из этого кода).

 3
Author: h0tw1r3, 2015-09-11 20:17:35