将WordPress切换为https后,重定向过多

mm1*_*975 8 wordpress .htaccess

用我的WordPress博客,我切换到https.因此,我已将以下代码添加到我的.htaccess-File中.我现在的问题是,我得到的问题是"太多重定向".谢谢你的提示!

域是子域:

https://en.example.com

# Begin Force SSL
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# End Force SSL
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Run Code Online (Sandbox Code Playgroud)

小智 38

确保在wp-config.php中定义WP_SITEURL和WP_HOME

define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');
Run Code Online (Sandbox Code Playgroud)

并添加此条件以检查wp-config.php中的https

    if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
        $_SERVER['HTTPS'] = 'on';
    }
Run Code Online (Sandbox Code Playgroud)

  • 这种方法在使用外部ssl隧道时比如cloadflare (5认同)
  • 这也使我也可以使用cloudflare SSL。 (2认同)

Ahm*_*med 24

我使用wp-config.php中的以下代码来解决这个问题

define('WP_HOME','https://mywebsite.com');
define('WP_SITEURL','https://mywebsite.com');
$_SERVER['HTTPS'] = 'on';
Run Code Online (Sandbox Code Playgroud)

  • 有了Cloudflare,`$ _SERVER ['HTTPS'] ='on';`就足够了。 (4认同)

小智 7

我有同样的问题nginx,并且必须在 .htaccess

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

wp-config.php

define('FORCE_SSL_ADMIN', true);
define('RELOCATE', TRUE);
$_SERVER['HTTPS'] = 'on';
define('WP_HOME', 'https://yourdomain.com');
define('WP_SITEURL', 'https://yourdomain.com');
Run Code Online (Sandbox Code Playgroud)

除非您确定将HTTPS传递给快速cgi,否则请勿将其与nginx一起使用,否则它将无法正常工作,

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}
Run Code Online (Sandbox Code Playgroud)

它可能对nginx的错误日志中的调试级别有所帮助,这是您看到流程的方式。


小智 6

确保您定义了WP_SITEURLWP_HOMEwp-config.php

define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');
Run Code Online (Sandbox Code Playgroud)

并添加此条件以检查 wp-config.php 中的 https

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}
Run Code Online (Sandbox Code Playgroud)

这很好用


小智 6

如果使用 Cloudflare 和 Nginx:

1- 转到云耀斑并在页面规则中添加始终使用 HTTPS。

2-将以下代码添加到wp-config.php中

define('WP_HOME','https://example.com/blog');
define('WP_SITEURL','https://example.com/blog');

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}
Run Code Online (Sandbox Code Playgroud)

注意:不要更改数据库中的任何内容并使用隐身模式。


eat*_*ode 5

尝试将前三行更改为:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

相信,除非您尝试访问https://en.example.com/:443,否则{SERVER_PORT}将永远不会返回443。