通过 wp-config 正确地强制使用 wordpress 上的 SSL.php

2022-08-30 19:11:20

如果我编辑 我应该添加:wp-config.php

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

但是,我的网站有规则在整个网站上强制使用https和www:.htaccess

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中它没有),你应该将协议检查留给Web服务器。

还应避免在重写规则中定义端口。如果您没有使用多站点WP设置,可以尝试:

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

答案 2

我用了这个。这很好。

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

如果您的服务器端口与 443 不同。您可以指定它。否则,无需再次使用它 。


推荐