Правильно принудительно использовать 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, но я не могу понять, какой из них правильный/основной...
3 answers
PHP-код в таком случае вообще не должен иметь дело с SSL. Здесь применяется классический принцип SoC: если ваш код явно не работает с подключением (в WP это не так), вы должны оставить проверку протокола на веб-сервере.
Вам также следует избегать определения порта в ваших правилах перезаписи. Если вы не используете многоузловую настройку WP, вы можете попробовать:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Я использовал этот. что вполне нормально для продолжения.
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
Если порт вашего сервера отличается от 443. вы можете указать его. В противном случае нет необходимости использовать его еще раз.
Исправлены правила.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
) не рекомендуется, если у вас нет не очень распространенной настройки (т. Е. за прокси - что является единственной причиной для любого из этого кода).