Apache開啟404自定義面頁、PHP輸出404錯誤作者:elinstudio 發(fā)布時間:July 18, 2012 分類:Web服務(wù)器 過增加.htaccess: 通過修改httpd.conf: httpd.conf中的這一部分,#ErrorDocument 404 /missing.html 是顯示錯誤頁信息的,去掉前面的#,修改為:ErrorDocument 404 /404.html 注意: 狀態(tài)碼的查看可以安裝IE的一個HttpWatch插件進行測試! 本文針對Apache + PHP的網(wǎng)站,如果是Win的,思路也差不多。自定義404頁面,也就是當用戶訪問一個不存在的頁面時不顯示服務(wù)器默認的錯誤頁面,而是顯示一個事先做好的提示頁面,用戶瀏覽器地址欄的網(wǎng)址依然是他輸入/訪問的網(wǎng)址。這樣做至少有兩個好處: 讓用戶感到這個錯誤依然在網(wǎng)站的控制范圍內(nèi)。 先說說產(chǎn)生404的幾種可能 1、User-Agent(瀏覽器、搜索引擎bots)會訪問固定的文件,例如 Maxthon/Firefox瀏覽器會請求所有被訪問網(wǎng)站的 favicon.ico,如果恰巧那個網(wǎng)站沒有這個ico文件,它的服務(wù)器log就會多出一行404錯誤提示,同樣的還有搜索引擎請求 robots.txt文件。 對于第一種情況,當然是上傳favicon.ico和robots.txt文件到根目錄,制作方法和書寫規(guī)則不再多說。 其次要處理另一種更為常見的404,即數(shù)據(jù)不存在的404。比如這個Blog系統(tǒng)是數(shù)據(jù)庫驅(qū)動的,當用戶訪問某篇文 章時Blog程序會根據(jù)ID查詢數(shù)據(jù) 庫,如果恰好這個文章被刪除,則應(yīng)該告訴用戶該頁不存在,同樣的情況還適合于論壇刪貼后的提示。目前多數(shù)Blog和論壇,及其它數(shù)據(jù)驅(qū)動的網(wǎng)站,處理這種 問題的做法是僅顯示不存在的提示而不發(fā)送404 header,或者干脆轉(zhuǎn)向到/404.php頁面(這樣瀏覽器的地址欄就變成了/404.php)。這種做法的缺點是搜索引擎會看到該網(wǎng)站有很多內(nèi)容相 同(都是不存在的提示文字),URL不同的頁面,或者是看到該網(wǎng)站有很多通過302轉(zhuǎn)向到同一個頁面的情況,這些都有可能被搜索引擎誤以為是SPAM而懲 罰該網(wǎng)站(很多被懲罰的網(wǎng)站始終認為自己是無辜的,其實都是小錯積累的結(jié)果)。因為已經(jīng)pass過了服務(wù)器層,.htaccess的404定義不再起作 用,所以在讀取數(shù)據(jù)的php文件種針對這種情況應(yīng)該做以下處理:
這樣做可以保證顯示404.php的內(nèi)容,并且發(fā)送404 header,并且瀏覽器地址欄的網(wǎng)址依然是那個用戶原始訪問的網(wǎng)址。從人類理解的角度往往會把header()語句放在require()上面,但那會 使php停止執(zhí)行下面的require函數(shù),把header放在最后反而能把404 header發(fā)送出來。建議編寫論壇、博客和數(shù)據(jù)驅(qū)動網(wǎng)站程序的人都用上面的方法處理數(shù)據(jù)不存在時的提示信息,避免和搜索引擎產(chǎn)生誤會。 最后說說前面提到的通知webmaster的問題,即區(qū)分產(chǎn)生404的第二、第三種情況。顯然,兩種情況的區(qū)別是第二種情況,不含有REFERER信息,所以通知webmaster的代碼應(yīng)該是這樣的:
標簽: 404錯誤 |
|