![404 标头错误,而不是正确的 200](https://linux22.com/image/675703/404%20%E6%A0%87%E5%A4%B4%E9%94%99%E8%AF%AF%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84%20200.png)
我刚刚通过 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