[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
我的WP搬了一次家
wordpress就找不到wp-cron.php了
我试着第一种方法可以是我找不到etc/hosts
请问这个文件夹在哪
谢谢
/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
站里面的文章都很棒哦…无意中进入..非常喜欢,继续加油!收藏了!