Правильно принудительно 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. вы можете указать его. В противном случае нет необходимости использовать его еще раз.