通过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),但看起来您有基于问题的某种代理

  • 如果web服务器未设置HTTP_X_FORWARDED_PROTO,则不好将生成PHP警告(标准PHP配置)
  • 良好在检查值之前检查变量是否存在。不生成任何警告
  • 最好**

  • **作为一般规则,不鼓励更改
    \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%确定)@Ryflex
    mysslcertdomainname.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]