Hi!请登陆

站点出现“400 Bad Request”错误的解决办法

2021-1-10 51 1/10

节前明月专门向鸟哥要了 Begin主题的最新包,准备趁着节假日给我的主站和博客站的 Begin主题都升级一下,自从明月所有的站点都启用了HTTPS后就一直想着要把主题都同步更新到最新版。刚开始启用部署SSL还很正常,没有想到的是在更新主题的时候竟然出现问题了。

这次出现问题主要是如下两个地方:

1、站点出现“400 Bad Request”错误,提示“The palin HTTP request was sent to HTTPS port”,具体如下所示:

站点出现“400 Bad Request”错误的解决办法

2、 Begin 主题的文章标题右上角的“隐藏侧边栏”按钮失效,点击后会隐藏侧边栏但也会返回主页(具体呈现链接是:'https://www.mydomain.com/#')。

第一个问题『站点出现“400 Bad Request”错误』

无论是谷歌、百度查询出来的解决方案都是说是 Nginx 配置SSL 造成的,这让我一阵折腾 Nginx 的配置文档呀,越折腾问题越多,最后直接造成站点“500错误”了,洗了个头抽支烟冷静了一下,感觉问题根本就不会是 Nginx 造成的,因为同样的其他几个启用了 SSL 的站点一切都是正常的,相关的 SSL 在 Nginx 的配置几乎都是一样的,怎么可能同样的配置出现两种结果呢?这不科学呀!

于是,转过头来仔细的研究了一下 WordPress,最后决定用大招儿,那就是停用 WordPress 下所有的插件(其实就是在Linux控制终端修改一下 wp-content/plugins 目录的名称,让 WordPress 找不到插件而已,然后新建一个空的 plugins 目录),没有想到这个大招儿真的是万试万灵呀,网站竟然恢复正常了。好吧,罪魁祸首就是插件造成的,严格意义上来说应该是启用部署 SSL 后造成插件数据冗余。至于具体是哪个插件,目前不好说。但是感觉缓存插件 W3 Total Cache 和 WPJAM BASIC 的嫌疑最大以及 Custom Post Type Permalinks 也是有这个可能的。其实无论是哪个插件都不重要的,明月感觉最重要的是在部署 SSL 后,一定要记得删除所有插件重现安装一遍,以减少插件数据冗余造成的这种故障隐患,毕竟 HTTPS 后是会影响到全站的 HTTP 调用啥的,所以最保险的就是重装所有插件让插件直接在默认 HTTPS 下启用。

第二个问题『文章页的“隐藏侧边栏”按钮失效』

从1号升级完主题这个问题就一直存在了,可以说节日期间一直在纠结这个“问题”。鸟哥给我的留言是“代码造成的,只能自己排查”,没办法呀!我采用了最笨的办法,那就是在主题选项里的“广告位”和“定制风格”里所有的自己添加的代码都复制粘贴出来保存主题查找问题出在哪里?

最后找到了罪魁祸首就是下面这货:

  1. <base href="https://www.ymanz.com/" />
Base 标记定义和语法

<base> 标签为页面上的所有链接规定默认地址或默认目标。通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。

好吧,这是我当时为了防范被恶意 iFrame 框架引用而放的,目前看几乎是没有什么用的,可参考【防止网站被恶意框架嵌入的JS代码分享】一文,清除这行在主题选项——“广告位”下的“需要在页头 <head></head> 之间加载的广告代码,如无必要不需添加任何东西”里的代码后,文章标题右上角的“隐藏侧边栏”完美恢复了。

至此两个节日期间遇到的问题,完美解决了!总结一下经验教训那就是当出现故障的时候,不要一味的过分相信网上各类所谓的“解决办法”文章,这些文章大部分是“鹦鹉学舌”式的转载而已,基本都是复制粘贴出来的,我敢说90%以上的人都没有自己亲自实践验证过,剩下的10%就是不是我们遇到的问题造成的,仅仅是错误提示一样而已。所以,遇到故障问题还是要自己静下心来冷静思考,如果有“高手”的话可以简单的陈述请教一下,“高手”的经验有时候会起到“画龙点睛”的神奇作用。

相关推荐