[Apache][WP] 解決: wp-cron.php not found or unable to stat

[Apache][WP] 解決 error_log 中的 [error] [client 127.0.0.1] script ‘…/www/wp-cron.php’ not found or unable to stat 錯誤訊息

如果你一個 Apache web server 服務多個網站的話,而在 “主站” (寫在 …/apache/conf/httpd.conf 中的 DocumentRoot 那個即為主站) 的 error_log 檔案中要是看到上面這個訊息的話,那表示你在此 Apache 服務的網站中至少有一個網站是用 WordPress 架設的,並且它不是上述的 “主站”,而它嘗試要跑 wp-cron.php 時發生了錯誤。

起因:
Apache 嘗試要幫 WordPress 要跑 wp-cron.php 時會呼叫到 hostname 轉 IP 的底層,這時要是 /etc/hosts 檔案中有以下這幾行:

127.0.0.1    localhost localhost.localdomain wp-hostname.yourdomain.com yourdomain.com yourdomain
xxx.xxx.xxx.xxx    wp-hostname.yourdomain.com yourdomain.com yourdomain

其中上面寫在 127.0.0.1 那行的 wp-hostname.yourdomain.com 是造成錯誤的原因。因為底層 hostname 轉 IP 時查 /etc/hosts 會先查到第一行而認為 wp-hostname.yourdomain.com 是 IP = 127.0.0.1,這樣會造成 Apache 以為要跑 wp-cron.php 的是 “主站” (假設這個 “主站” 不是用 WordPress 架設的網站)而去嘗試執行 “主站” 中這個不存在的 wp-cron.php 檔案,後來發現檔案不存在而寫出上面的錯誤訊息到 error_log 中。

解法 1:
將 127.0.0.1 那一行的「wp-hostname.yourdomain.com」刪除,只留下寫在 xxx.xxx.xxx.xxx 那一行即可。也就是上述 /etc/hosts 範例的兩行變成:
127.0.0.1     localhost localhost.localdomain yourdomain.com yourdomain
xxx.xxx.xxx.xxx    wp-hostname.yourdomain.com yourdomain.com yourdomain

解法 2:
有些(系統)工具在跑完以後會幫你在 127.0.0.1 後面加上「wp-hostname.yourdomain.com」,所以上面的解法 1 就不是那麼適用,那就可以嘗試第二個解法。
在 …/apache/conf/httpd.conf 或是 .htaccess 中將 “主站” 接收到的這個 http 需求 “重寫(rewrite)” (假設主站位在 /var/www/html/ 目錄):

<Directory /var/www/html>
RewriteRule wp-cron.php http://wp-hostname.yourdomain.com/wp-cron.php [R=301]
</Directory>

PS: 除非不得已,不要嘗試用 crontab 去每個小時跑 wp-cron.php :p

你喜歡這篇文章嗎? 馬上分享它:

相關文章:

  1. [Apache][MySQL] error_log: [crit] (70023)This function has not been implemented on this platform: DBD: driver for [DBDriver unset] not available
  2. [SEO][架站] 使用 Apache 的 ReWrite 設定讓 URL 變短(short URL)、變成靜態樣式
  3. postfix 中只開 localhost 網路介面或跑 Virtual Host 時, 碰到 loops back to myself 錯誤要如何解決?
This entry was posted in 架站, 解決 and tagged , , . Bookmark the permalink.

3 Responses to [Apache][WP] 解決: wp-cron.php not found or unable to stat

  1. zhang says:

    我的WP搬了一次家
    wordpress就找不到wp-cron.php了
    我试着第一种方法可以是我找不到etc/hosts
    请问这个文件夹在哪
    谢谢

  2. cctai says:

    /etc/hosts 指的是,當你的作業系統 (OS, Operating System) 是用 Unix 或 Unix like (如: Linux) OS 系統時,你可以在 /etc/ 目錄中找到 hosts 這個檔案。

    如果是 Microsoft 的 Windows OS 系統的話,可能要找找類似以下這個路徑 (但是這一篇寫的基礎是基於 Unix 或 Unix like OS 寫的):
    C:\WINDOWS\system32\drivers\etc\hosts

  3. ceiba says:

    站里面的文章都很棒哦…无意中进入..非常喜欢,继续加油!收藏了!

Leave a Reply