Ryf*_*lex 18 php wordpress .htaccess ssl https
如果我编辑wp-config.php我应该添加:
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
Run Code Online (Sandbox Code Playgroud)
但是,我的网站有.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]
Run Code Online (Sandbox Code Playgroud)
我知道还有其他可用的重写,但又不确定哪一个是正确的.
我应该使用以下哪3个 wp-config.php
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}
Run Code Online (Sandbox Code Playgroud)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
Run Code Online (Sandbox Code Playgroud)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}
Run Code Online (Sandbox Code Playgroud)
我已经在互联网上发现了一些关于wordpress SSL的其他一些略有不同的变化,但我无法弄清楚哪一个是正确的/主要的......
小智 12
在这种情况下,PHP代码根本不必处理SSL.这里应用了经典的SoC原则:如果您的代码没有明确地使用连接(在WP中它没有),您应该将协议检查留给Web服务器.
您还应该避免在重写规则中定义端口.如果您不使用多站点WP设置,您可以尝试:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
小智 7
我用过这个.这很好继续下去.
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
Run Code Online (Sandbox Code Playgroud)
如果您的服务器端口与443不同,您可以指定它.否则,无需再次使用它.
更正了 .htaccess 规则(详见 wiki.apache.org):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]
Run Code Online (Sandbox Code Playgroud)
通常,您的代码示例(1,2,3)对于 WordPress 来说不是必需的,但看起来您有某种基于该问题的代理。
HTTP_X_FORWARDED_PROTO如果Web 服务器未设置,将生成 PHP 警告(标准 php 配置) 。** 作为一般规则,不鼓励更改_SERVER变量(如SERVER_PORT和HTTPS),除非您有不那么常见的设置(即在代理后面 - 这是任何此代码的唯一原因)。