WordPress站点在子文件夹访问故障问题

企业站点从LAMNP环境切换到LNMP环境之后,子目录的wordpress站点就显示不正常,点击任何链接都会跳转到主目录下对应链接,比如中文气相法二氧化硅产品页面 /cn/products/introduction/ 会跳转到 英文fumed silica介绍页面 /products/introduction/ ,导致不能只能显示英文页面或者返回404.下面把解决办法记录以下以供参考

排查Nginx Log日志

在检查Nginx Log日志之后并没有发现任何错误,所有日志都正常。通过对备份的Nginx Conf文件对比,确认服务器没有黑导致修改配置文件

排查CDN

因为使用了Cloudflare的CDN前端,所以需要确定指向正确:

  • 登录到Cloudflare查看ip解析,没有任何异常,确认IP指向正确
  • 登录到Cloudflare及邮箱查看历史邮件和日志,没有任何错误报告
  • 清除所有Cloudflare缓存文件
  • 通过在服务器上新建文本文档访问可以访问到,且子目录下的文本文档正常访问
  • 修改hosts文件强制指向ip,访问正常,但是错误跳转的问题依旧

排查Wordpress设置

  • 检查wp-config.php中的设置内容,没有任何关于站点地址的设置
  • 检查mysql数据库设置,排查起来费时,初步排查了wp_options之后没有发现异常,其余表不继续排查
  • 禁用所有非默认主题,插件,然后重新启用,问题依旧
  • 删除.htaccess(虽然知道肯定不是这个问题,但还是试了一下)
  • chown和chmod命令设置正确权限
  • wp-suer-cache和Autoptimize缓存删除

排查服务器设置

  • 重启Nginx,php5-fpm,mysql
  • 大概浏览服务器历史命令,初步排查被黑可能性
  • 删除所有缓存文件,防止缓存跳转
  • 删除.htaccess(虽然知道肯定不是这个问题,但还是试了一下)
  • 在另外一个服务器重建了网站,但是问题依旧

排查本地电脑解析,浏览器

至此,为了解决这个问题已经排查了两个多小时,终于想到有没有可能是本地网络解析,电脑缓存的问题,遂进行如下排查

  • Chrome浏览器启用隐私模式,禁用所有缓存;新建Chrome用户,无插件无缓存进行访问
  • 换用firefox,IE浏览器等进行测试
  • 用代理服务器访问,排除解析问题
  • 换用不同电脑,手机关掉WIFI进行访问
  • 让外地同事,朋友访问,排除网络问题
  • http://www.gtmetrix.com/ 进行访问,确认在国外的远程服务器上仍会跳转错误

最终问题解决-Nginx配置出错

此时已经被这个问题弄得焦头烂额,赶紧又回想了之前的步骤,想起在站点上装有Redirections插件,里面启用了日志功能,赶紧去看里面的不正常跳转记录,一看吓一跳,这种不正常跳转竟然从8月份的时候就已经开始。回想一下8月份,当时最的最大改动就是从LAMNP切换到了LNMP,启用了Cloudflare,但是Cloudflare已经仔细排查了一遍,问题应该就是和LNMP环境有关。

*既然.htaccess已经不起作用Apache已经没有了,而且.htaccess已经被删掉,那应该就是Nginx配置文件的问题。
子目录下的静态文件可以访问到说明基本配置,权限没有问题,那就是wordpress子目录下的重写规则,到网上搜索了一下,找到如下代码:

        location /cn {
                index index.php;
                rewrite ^/cn/(.*)+$ /cn/index.php?$1; # it finally works
        }

看到这个代码,立马就意识到问题出在哪儿了。因为之前没有针对子目录的这段代码,导致所有请求都被交到了父目录的wordpress去处理,自然就跳转到了父目录的链接。
加上这个代码之后,保存重启Nginx,问题解决。

后记

从这次这个故障能看出一些问题:

  1. 小企业的站点访问量不高,特别是某些非主要站点的重视程度不够,问题出现将近3个月时间才得以发现并解决。这个在站长工具,检测工具里甚至Nginx Log里都不会报错,所以日常排查难以发现问题
  2. 切换生产环境后因为切换过程中耗费时间过久,只排查了一些主要问题,导致这些不易发现的问题难以得到解决

可行的应对方法:

  1. 所有同事参与网站建设,至少每周写一篇文章发布到网站页面,然后自行校对,提高访问次数,有问题能及时发现解决
  2. 更换生产环境,启用CDN等有可能导致网站异常的操作之后,花费一两个小时进行检查,同时也让同事协助

Leave a Reply

Your email address will not be published. Required fields are marked *