Правильно принудительно 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;
}

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

Ответы

Ответ 1

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

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

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Ответ 2

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

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

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

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

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

Ответ 3

Я использовал этот. и это нормально.

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

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