Cache

404 標頭錯誤而不是正確的 200

  • January 26, 2016

我剛剛通過 sftp/ssh 更新了一個(動態)網站,所有新頁面都被視為 404 錯誤未找到。實際上,所有頁面,包括被覆蓋的舊頁面。

此外,該網站正在使用 cloudflare。

讓我向您展示一個 URL 的捲曲:

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 錯誤。但是一個 URL 是活的,並且像魅力一樣工作。

我認為問題出在cloudflare上。所以,當我之前捲曲時,我“清除了所有東西”,但 404 仍然存在。我添加了一個自定義規則來繞過特定 url 上的 cloudflare 上的記憶體,但它根本不起作用。

另外,我認為這是我的 .htaccess 上的一些錯誤,我從那裡刪除了所有內容。我重新啟動了 apache,但 404 仍然存在。

結果,每個搜尋引擎和每個其他機器人都會看到 404 標頭。問題無處不在,除了 /index.html 和 /folder-wp-blog/ 文件夾中的 wordpress 部落格。這個WP根本沒有改變。因此,根目錄中的所有其他 html 和 php 文件都被標記為 404 …

有任何想法嗎?解決方案?

這些標頭表明該請求已經到達您的 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

引用自:https://serverfault.com/questions/751721