小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Apache開啟404自定義面頁、PHP輸出404錯誤

 冰風(fēng)颯 2013-10-27

Apache開啟404自定義面頁、PHP輸出404錯誤

作者:elinstudio 發(fā)布時間:July 18, 2012 分類:Web服務(wù)器

過增加.htaccess:
在httpd.conf中設(shè)置對目錄開啟偽靜態(tài)。
AllowOverride All
然后在目錄里放一個.htaccess(.htaccess),添加:
ErrorDocument 404 /404.html
這個的內(nèi)容根據(jù)你的情況改寫 。可是有時候當你用IE瀏覽的時候會發(fā)現(xiàn),這玩意壓根就不跳轉(zhuǎn),關(guān)鍵的地方就是這個html,如果404.html的小于512字節(jié)的話,那么IE會認為這個錯誤頁面不夠“友好”,會忽視掉的!

通過修改httpd.conf:
這樣做的好處是對于你的網(wǎng)站會更安全些,如果沒設(shè)置,別人在你的網(wǎng)址后隨便輸入一個路徑,會顯示404錯誤,并且會顯示你的服務(wù)器版本號,服務(wù)器配置一目了然,為了避免這種情況,可以設(shè)置錯誤頁面。當出現(xiàn)404錯誤,即找不到網(wǎng)頁時,把訪問者導(dǎo)入到一個錯誤頁面。
修改 httpd.conf,找到:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www./subscription_info.html

httpd.conf中的這一部分,#ErrorDocument 404 /missing.html 是顯示錯誤頁信息的,去掉前面的#,修改為:ErrorDocument 404 /404.html

注意:
1.切記不要將404錯誤轉(zhuǎn)向到網(wǎng)站主頁,否則可能會導(dǎo)致主頁在搜索引擎中消失。如果一個 404 頁面的內(nèi)容小于 512b,IE 會認為該 404 頁面不夠友好,在 IE 下將不會成功返回該 404 錯誤頁面。
2.切記不要使用絕對URL。例如:http://www./404.html。正常情況返回的是 404 狀態(tài)碼,而使用URL形式則返回的是 200 狀態(tài)碼.

狀態(tài)碼的查看可以安裝IE的一個HttpWatch插件進行測試!

本文針對Apache + PHP的網(wǎng)站,如果是Win的,思路也差不多。自定義404頁面,也就是當用戶訪問一個不存在的頁面時不顯示服務(wù)器默認的錯誤頁面,而是顯示一個事先做好的提示頁面,用戶瀏覽器地址欄的網(wǎng)址依然是他輸入/訪問的網(wǎng)址。這樣做至少有兩個好處:

    讓用戶感到這個錯誤依然在網(wǎng)站的控制范圍內(nèi)。
    讓webmaster即時知道有這么一個404頁面。

先說說產(chǎn)生404的幾種可能

    1、User-Agent(瀏覽器、搜索引擎bots)會訪問固定的文件,例如 Maxthon/Firefox瀏覽器會請求所有被訪問網(wǎng)站的 favicon.ico,如果恰巧那個網(wǎng)站沒有這個ico文件,它的服務(wù)器log就會多出一行404錯誤提示,同樣的還有搜索引擎請求 robots.txt文件。
    2、用戶錯誤的輸入了URL。比如某人先前訪問網(wǎng)站的頁面/page1.html,然后利用瀏覽器地址欄的記錄功能重新訪問,不料錯把backspace當成了回車,意識到后又因為手比腦快直接按回車訪問了/page1.htm頁面(少了個l)。
    3、某個頁面被刪除了,而其他網(wǎng)站,如論壇、搜索引擎還在引用這個鏈接。

對于第一種情況,當然是上傳favicon.ico和robots.txt文件到根目錄,制作方法和書寫規(guī)則不再多說。
對于第二種情況,所能做的就是和第三種情況進行區(qū)分,既只有因第三種情況發(fā)生的時候才通知webmaster進行處理。

其次要處理另一種更為常見的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)該做以下處理:

  1. <?   
  2.  $id = $_GET['id']; //這里獲得文章、帖子的索引id  
  3. //通過 $id 查詢數(shù)據(jù)庫  
  4. if("如果沒有任何結(jié)果")   
  5. {   
  6.      //以前是僅僅顯示“該帖子已經(jīng)不存在”的提示,現(xiàn)在是:  
  7.      require('/404.php');   
  8.      @header('HTTP/1.1 404 Not Found');   
  9.      @header('Status: 404 Not Found');   
  10.      exit;   
  11. }   
  12. ?>  

這樣做可以保證顯示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)該是這樣的:

  1. <?   
  2.  if($_SERVER['HTTP_REFERER'] != ''){ //如果有referer,則證明來自某個頁面的點擊  
  3.     mail("...把404頁面 $_SERVER['REQUEST_URI']和referer頁面$_SERVER['HTTP_REFERER']通過email寄到webmaster的信箱");   
  4. }   
  5. ?>  

標簽: 404錯誤

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多