前因
作为一名 WordPress 新手,在自己的VPS或者服务器用 WordPress 来建站,通常会遇到很多问题,例如空白页,内部错误等,非常恼人。最近火哥遇到了“将你重定向的次数过多”问题,这个问题出现在配置 SSL 和重定向的时候。我的服务器是安装了军哥的LNMP一键安装包,套了 Cloudflare 加速,没有申请SLL证书,跑不了 https,我的目标很明确:
- 非 www 的URL 301重定向到带 www 的 URL
- 非 https:// 的URL 301重定向到 https:// 的 URL
后果
由于没有玩过 WordPress,所以经过浸 Y(泡)多年 WordPress 玩家好友指点,通过 lnmp onlyssl 命令,给域名添加了SSL证书, 后台设置里修改 WordPress地址(URL) 和站点地址(URL)为带 https:// 的URL,
然后修改 wp-config.php 文件,添加
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
修改 nginx 等等一顿操作,结果还是不行,出现“将你重定向的次数过多”错误提示:
然后各种调试修改,又是打不开后台,又是不跳转等等等等,耗时几个小时无果。作为一名帝国和 Joomla 老手,怎么也没想明白,咋这么坑呢。。。。还好经过一天的冷静,查阅资料,仔细分析,终于明白,原来 WordPress 自带了url-friendy的 SEO 功能,类似的 SSL,SEO,Cache 类插件也自带了 SEO 的功能,而且是使用重定向功能实现的,所以会出现“将你重定向的次数过多”这个错误,明白了原因那么解决方法就简单了。
解决方法
弃用VPS或服务器上添加 SSL 证书方案,改用Cloudflare自带的免费SSL证书和重定向功能。
1、编辑站点的 nginx 配置文件 www.yoursite.com.conf,删除有关 SSL 的配置语句,确保以下配置语句正确并重启 nginx:
listen 80;
server_name www.yoursite.com yoursite.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.yoursite.com;
if ($http_host !~ "^www.yoursite.com$") {
rewrite ^/(.*) https://www.yoursite.com/$1 permanent;}
2、和上文提到过的一样,修改 wp-config.php 文件和后台站点URL等设置,如果后台打不开,可以通过 PhpMyadmin 修改 WordPress 数据库里 wp-option 表的相关字段值来实现。
3、登陆 Cloudflare ,切换到 SSL/TLS 模块,Overview 中选择 Flexible。
4、点击 Edge Certificates,添加一个免费的证书,自动续期的, 打开 Always Use HTTPS。
5,Wordpress 后台删除缓存和浏览器缓存,成功!
总结
我这个笨方法的原理就是,服务器只负责来处理不带 www 的网址跳转到带 www 的网址,Cloudflare 负责 http 到 https 的301重定向。当然,我知道老鸟们有其他方法也可以实现,本文只是希望能够给像我一样,初次接触 WordPress 的朋友一个参考,多一个解决问题的方法。
在不断的修改中,很有可能因为各种缓存问题耗费很长的时间来调试,这里有个好方法,就是禁用各种缓存,比如:
- 禁用 WordPress 的 WP Super Cache;
- 打开 Cloudflare 的 Development Mode;
- 每一次修改后,新开一个浏览器的隐私模式;
- 甚至你也可以每次都清空电脑的 DNS 缓存,换一个新的IP。。。
未经允许不得转载:火哥分享 » WordPress服务器使用Cloudflare配置SSL