WordPress SSL安全组证书配置后 后台正常 前台重定向死循环
不知道什么原因,一般wordpress开启ssl都是很简单的,但是有时候还是会碰到莫名其妙的死循环。往上google 百度了一大圈,看别人都是前台https访问正常,后台访问重定向死循环,他们的解决方法是装 Really Simple SSL 插件 或者修改wp-config.php配置
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
但这个对我这个问题没什么卵用。
后面搜了一大圈,最终找到解决方案,至于原因不明(个人猜测是网站本地部署后,搬移到线上配置问题,导致template_redirect函数死循环,但http又没什么问题),这里记录下修改方法。
注释 wp-include/template-loader.php 13行 do_action( 'template_redirect' );即可。
同时附上开启全站ssl的.htaccess代码
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{SERVER_NAME}$1 [L,R=301]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Cloudflare中死循环
服务器自己装证书,然后再开cloudflare SSL,模式选full
wp-config.php加$_SERVER['HTTPS']='on'; ->这个不确定需不需要
貌似用cloudflare的证书,然后打开Always Use HTTPS也是可以
还有一个原因就是安装 memcached 和 object-cache.php后,是缓存内存数据库的时候,数据库前缀都是同一个(默认的_wp)导致。
解决方案:
- 修改数据库表前缀
以wp_前缀改成_hl为例 执行以下SQLRENAME TABLE wp_comments TO hl_comments;
RENAME TABLE wp_commentmeta TO hl_commentmeta;
RENAME TABLE wp_links TO hl_links;
RENAME TABLE wp_options TO hl_options;
RENAME TABLE wp_postmeta TO hl_postmeta;
RENAME TABLE wp_posts TO hl_posts;
RENAME TABLE wp_terms TO hl_terms;
RENAME TABLE wp_termmeta TO hl_termmeta;
RENAME TABLE wp_term_relationships TO hl_term_relationships;
RENAME TABLE wp_term_taxonomy TO hl_term_taxonomy;
RENAME TABLE wp_usermeta TO hl_usermeta;
RENAME TABLE wp_users TO hl_users;
UPDATE hl_options SET option_name = REPLACE(option_name, 'wp_', 'hl_') WHERE option_name LIKE 'wp_%';
UPDATE hl_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'hl_') WHERE meta_key LIKE 'wp_%';然后在wp-conconfig.php中修改对应的前缀 $table_prefix = 'hl_';
注意看有没有其他插件生成的表,需要额外替换 - 在不同站点的 wp-config.php 文件定义不同的 WP_CACHE_KEY_SALT 值,
define('WP_CACHE_KEY_SALT', 'xxx'); //不同站设成不一样