404 标头错误,而不是正确的 200

404 标头错误,而不是正确的 200

我刚刚通过 sftp/ssh 更新了一个(动态)网站,所有新页面都被视为 404 错误未找到。实际上,所有页面,包括被覆盖的旧页面。

此外,该网站正在使用 cloudflare。

让我给你展示一下 URL 的 curl:

curl http://example.com/something/

 HTTP/1.1 404 Not Found Date: Tue, 26 Jan 2016 01:25:08 GMT
 Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked
 Connection: keep-alive Set-Cookie:
 __cfduid=de5a53a227295f9d9374fdf39bb45514f1453771507; expires=Wed,25-Jan-17 01:25:07 GMT; path=/; domain=.example.com; HttpOnly
 X-Powered-By: PHP/5.5.29 
 X-Pingback: http://example.com/folder-wp-blog/xmlrpc.php 
 X-UA-Compatible: IE=edge 
 Expires: Wed, 11 Jan 1984 05:00:00 GMT 
 Cache-Control: no-cache, must-revalidate, max-age=0 
 Pragma: no-cache Set-Cookie:
 PHPSESSID=c72b8d6fc18775ef85ac8ab1b8bf6e95; path=/ Server:
 cloudflare-nginx 
 CF-RAY: 26a86c0ee0f10f15-IAD

如您所见,curl 返回了 404 错误。但是 a URL 仍然有效,并且运行正常。

我认为问题出在 cloudflare 上。因此,我之前在 curl 时“清除所有内容”,但 404 仍然存在。我添加了一条自定义规则以绕过特定 URL 上的 cloudflare 缓存,但根本不起作用。

另外,我认为那是我的 .htaccess 上的一些错误,我从那里删除了所有内容。我重新启动了 apache,但 404 仍然存在。

结果,每个搜索引擎和其他机器人都会看到 404 标头。除了 /index.html 和位于 /folder-wp-blog/ 文件夹中的 wordpress 博客外,问题无处不在。此 WP 根本没有更改。因此,根目录中的所有其他 html 和 php 文件都标记为 404...

有什么想法或解决方案吗?

答案1

这些标头表明请求已完全到达您的 PHP/Wordpress 安装,因此问题出在那里,而不是在 CloudFlare:

X-Powered-By: PHP/5.5.29 
X-Pingback: http://example.com/folder-wp-blog/xmlrpc.php 

通过 SSH 连接到服务器并从服务器内部进行测试,将 CloudFlare 排除在外:

curl -H 'Host: example.com' http://127.0.0.1/something/

这与请求http://example.com/something,但需要DNS解析或者通过CloudFlare。

相同测试技术的变体是/etc/hosts在服务器上更新并添加一行将 example.com 映射到 127.0.0.1。然后可以curl http://example.com/something从服务器内部运行,请求首先通过 CloudFlare。您可能希望在/etc/hosts服务器上完成测试后删除该条目,或者它可能被视为一种有用的优化,也许还可以简化WP-Cron可能从服务器内部回调的调用。

如果您在浏览器中看到不同的行为,那么curl差异很可能在于发送的 HTTP 请求标头。使用 Chrome Inspector 等工具仔细查看 Chrome 发送的请求标头。例如,如果 Chrome 中发送了 cookie,但没有发送curl,则可能会有所不同。一种公平竞争的方法是使用“隐身”或“私人浏览”窗口,这些窗口不会发送先前的浏览器 cookie。

在 Chrome 网络检查器中,您可以看到响应的服务器的 IP 地址。与从发出请求的dig +short example.com同一台机器运行的结果进行比较。curl

相关内容