這幾天MrMo.cc所在的主機商更動系統,將原本為mod_php模式的主機,改變為SuPHP,因此造成了造訪部落格時發生HTTP 500 Error,後來詢問原因之後才知道,在SuPHP的模式下不允許任何權限為 777 的目錄及檔案。另外在SuPHP的模式下也不支援透過 .htaccess 檔案變更 php.ini 參數,因此如果原本.htaccess檔案中有存在著php_ 開頭的設定,也將造成造訪網頁時,產生500錯誤。
那遇到這些問題時,該怎麼解決呢?
首先先檢查網站上,網頁的檔案中是否還有目錄或檔案權限為777,如果有,則把目錄權限修改為755,檔案權限修改為644。感覺只要在網頁目錄下執行chmod 644 -R *.*就可以解決了,但,事情總沒有那麼簡單,這樣的執行並不完整,最後在網路上找到了關於主機設定為SuPHP後要如何設定的資料,看到了更完整更好的變更所有目錄及權限方法。
變更目錄權限
find /home/*/public_html -type d -exec chmod 755 {} ;
變更檔案權限
find /home/*/public_html -type f -exec chmod 644 {} ;
上述的方法之中,可以把find裡的路徑修改為自己主機上的路徑,其實可以算是find很進階的使用。如果你的主機並不是所有的檔案都要設定為644那,可以參考這個網頁中的方法
find /home/*/public_html/ -type d -print0 | xargs -0 chmod 0755 # For directories
find /home/*/public_html/ -type f -not -name “*.pl” -not -name “*.cgi” -not -name “*.sh” -print0 | xargs -0 chmod 0644 # For files
至於,為什麼主機那邊要從mod_php改變為SuPHP呢?根據這一篇文章中所提到的,可以看到主要的原因就是SuPHP安全性比較高,但效能相對於mod_php較差。
SuPHP
Pros:
PHP runs as your user/group
PHP files can have perms of 640 (hiding things like passwords from other accounts)
Files/folders written by PHP are written as user/group (no apache or other global user)
Custom php.ini file per site (can add/remove security options)
Can run php4 and php5 at the same time (on even the same site!)Cons:
Slower
many PHP .htaccess options do not work (since you can have your own php.ini file this make this point moot)apache/mod_php
Pros:
Faster (about 25-30%)Cons:
PHP safe mode isn’t safe
files written by PHP are saved as the apache process (usually apache/apache user/group)