通过wp-config.php在wordpress上正确强制SSL
如果我编辑通过wp-config.php在wordpress上正确强制SSL,php,wordpress,.htaccess,ssl,https,Php,Wordpress,.htaccess,Ssl,Https,如果我编辑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 Rewri
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]
我知道还有其他可用的重写规则,但同样不确定哪一条是正确的
在wp config.php
1-不带isset(),带花括号,带服务器端口
2-没有花括号和服务器端口?
3-是否需要花括号/更好或“更正确”&是否需要服务器端口?
关于wordpress SSL,我在互联网上发现了其他一些稍有不同的变体,但我不知道哪一个是正确的/主要的…我使用了这个。这很好继续下去
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
如果您的服务器端口与443不同。您可以指定它。否则,无需再次使用 在这种情况下,PHP代码根本不需要处理SSL。 这里应用了经典的原则:若您的代码并没有显式地与连接一起工作(在WP中并没有),那个么您应该将协议检查留给web服务器 您还应该避免在重写规则中定义端口。如果您没有使用multisite WP设置,您可以尝试:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
已更正.htaccess规则():
通常情况下,Wordpress不需要您的代码示例(1,2,3),但看起来您有基于问题的某种代理
**作为一般规则,不鼓励更改
\u服务器
变量(如服务器端口
和HTTPS
),除非您有一个不太常见的设置(即,在代理之后-这是产生这些代码的唯一原因)。为了让这对我有效,我不得不注释掉围绕行$\u SERVER['HTTPS']='on'的if语句行代码>
我使用的是Zevenet CE 5.9,它不提供x-forwarded-for或x-forwarded-proto的选项,因此要将其置于反向代理之后,我们只需以这种方式强制https:)。如果您已经通过Apache的重定向规则强制SSL,我不确定您试图实现什么。@GustavoStraube似乎在代理之后。如果是这样的话,这个问题应该修改。你的.htaccess规则的一个错误是它不强制www,而我发布的这个规则强制www和https?(这也是一个问题,因为我不是100%确定)@Ryflexmysslcertdomainname.com
就是一个例子。对于我自己的站点,我使用%{SERVER_NAME}
——这意味着“重定向到Apache中配置的主服务器_NAME”。这实际上取决于您购买的SSL证书中的域名。我只希望它强制www跨每个子域/主域,https跨主域,在www被强制后,网站www.website.com
将变成https://www.website.com
但是www.testing.website.com
将是http://www.testing.website.com
此代码应放在何处?我将它添加到functions.php中,现在wp admin不起作用,但前端仍然可以工作。@NuEverest,请尝试将它放在wp config.php
中。如果使用多站点?
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]