程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 訪問編碼後的中文URL返回404錯誤的解決方法,url404

訪問編碼後的中文URL返回404錯誤的解決方法,url404

編輯:關於PHP編程

訪問編碼後的中文URL返回404錯誤的解決方法,url404


昨天做一個項目,其中有一個需求是每一張圖片對應一小段文字對圖片的說明,普通的做法是新建一個表然後把圖片名與說明文字都記錄到數據庫內。仔細考慮後感覺這個應用不要數據庫也能完成,我實現的方案是把說明文字URLENCODE後當做文件名,這樣當我讀取文件的時候再把文件名URLDECODE就可以後驅圖片的文字說明了。

可是通過浏覽器訪問圖片時卻提示找不到文件,如有一張圖片的說明文字為“瓊台博客”,URLENCODE後生成的文件名如下

復制代碼 代碼如下:
%E7%90%BC%E5%8F%B0%E5%8D%9A%E5%AE%A2.jpg

於是我通過浏覽器訪問圖片,提示找不到

仔細看了一下,發現浏覽器訪問的時候自動把文件名給轉回中文了

火狐

chrome

IE

Safari

IE與Safari從地址欄上沒有看出轉為漢字,但也同樣都提示找不到文件。但我感覺應該是它請求的時候也都自動轉了,只不過地址欄上的沒有顯示轉換後的。從Nginx的訪問記錄看訪問圖片時的請求情況

復制代碼 代碼如下:
 192.168.6.30 - - [12/Oct/2012:10:09:44 +0800] "GET /%E7%90%BC%E5%8F%B0%E5%8D%9A%E5%AE%A2.jpg HTTP/1.1" 404 199 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

請求URL處理沒發現什麼異常,最後通過反復研究編碼後的文件名,發現都是由百分號與字母數字組成,我感覺應該是浏覽器在遇到百分號時可能會做些其它轉換處理了,所以導致浏覽器訪問URLENCODE後的文件提示找不到。

於是我把所有URLENCODE後的文件名裡的百分號都用下劃線替換

復制代碼 代碼如下:
%E7%90%BC%E5%8F%B0%E5%8D%9A%E5%AE%A2.jpg

替換為

復制代碼 代碼如下:
_E7_90_BC_E5_8F_B0_E5_8D_9A_E5_AE_A2.jpg

重新使用浏覽器訪問,問題解決

如要獲取圖片的文字說明,直接把文件名的“_”替換回"%”再使用URLDECODE即可。

最後需要注意的是,Linux下文件名跟Win系統一樣都有長度限制,目前最常用的格式為ext3,這中格式允許255個字符長度,扣除大約5個作為拓展名後大約剩余250個長度純文件名,而一個漢字經過URLENCODE後的長度為9個,因此最大可以編碼27個漢字做為文件名

雖然這種方式存儲的漢字比較少,但可以利用一些加密方法獲得較短的一串密文,再把這段密文URLENCODE即可,具體實現方式我就不一一舉例,動手做做思考一下吧!


網站為何會出現404錯誤,怎解決

404是一種HTTP狀態碼,HTTP 404 狀態碼的出現意味著鏈接指向的網頁不存在,即原始網頁的URL失效,這種情況經常會發生,特別是對於大型網站來講,很難避免,比如說:網頁URL生成規則改變、網頁文件更名或移動位置、導入鏈接拼寫錯誤、編輯或程序工作人員疏忽等,導致原來的URL地址無法訪問;當Web 服務器接到類似請求時,會返回一個404 狀態碼,告訴浏覽器要請求的資源並不存在。導致這個錯誤的原因一般來說,有:網站本身問題導致:網頁URL本身已經發生變化,而前台頁面沒有及時更新;網頁本身或網頁文件位置發生改變,而沒有及時在後台更新;外部鏈接拼寫出錯;網站內容管理員或程序管理員在處理URL上沒有考慮周全,比如一些地方如果加入了鏈接屬性導致URL不能正常訪問。用戶網絡環境導致:無法在所請求的端口**問該網頁URL地址。Web服務擴展鎖定策略阻止本請求。MIME映射策略阻止本請求。對於網頁內容比較少的小型網站管理員來講,可以用死鏈接檢測工具“xenu.exe”來對網頁死鏈接進行檢測,發現並及時處理錯誤鏈接信息;對於內容較多的大中型網站管理員,使用上面的死鏈接檢測工具可能會消耗很多時間,可以關注每天網站日志文件中的用戶狀態碼情況,發現並及時解決404錯誤問題。制作友好的404錯誤頁面,提醒用戶訪問出錯信息,引導用戶進行首頁或目錄查找,提供站內查找功能或網站管理員聯系方式。對於SEO人員(搜索引擎優化工作者)來講,建議參考“404錯誤是否會對網站造成影響”一文獲取更多信息。普通用戶:嘗試更換浏覽器或清理浏覽器緩存(排除由於浏覽器控件或惡意插件等引起無法訪問的情況)查看目前用戶是否具有網絡鏈接權限(部分計算機可能被設置限時或限制進行網絡鏈接)檢測自身網絡環境是否正常(可以通過安全檢測或殺毒軟件進行檢測)檢測計算機中是否有相關限制程序運行(部分計算機可能被軟件設置控制網絡鏈接權限,需密碼才能鏈接)
 

404網頁錯誤 怎解決?急阿抓狂中

404頁面就是當用戶輸入了錯誤的鏈接時,返回的頁面。 404頁面的目的是:告訴浏覽者其所請求的頁面不存在或鏈接錯誤,同時引導用戶使用網站其他頁面而不是關閉窗口離開。 404對seo的影響 自定義404錯誤頁面是增強用戶體驗的很好的做法,但在應用過程中往往並未注意到對搜索引擎的影響,譬如:錯誤的服務器端配置導致返回“200”狀態碼或自定義404錯誤頁面使用Meta Refresh導致返回“302”狀態碼。正確設置的自定義404錯誤頁面,不僅應當能夠正確地顯示,同時,應該返回“404”錯誤代碼,而不是 “200”或“302”。雖然對訪問的用戶而言,HTTP狀態碼究竟是“404”還是“200”來說並沒有什麼區別,但對搜索引擎這則是相當重要的。 搜索引擎蜘蛛在請求某個URL時得到“404”狀態回應時,即知道該URL已經失效,便不再索引該網頁,並向數據中心反饋將該URL表示的網頁從索引數據庫中刪除,當然,刪除過程有可能需要很長時間;而當搜索引擎得到“200”狀態碼時,則會認為該url是有效的,便會去索引,並會將其收錄到索引數據庫,這樣的結果便是這兩個不同的url具有完全相同的內容:自定義404錯誤頁面的內容,這會導致出現復制網頁問題。輕則被搜索引擎降權,重則會K掉網站。 如何實現一個良好的404頁面 改變服務器默認錯誤頁面就可以達到效果。下面是一些可以使得訪客輕松實現正常訪問的建議。
遵循的理念
提供簡明的問題描述,消除訪客的挫敗感。 提供合理的解決方案,輔助訪客完成訪問目標。 提供個性化的友好界面,提升訪問體驗。
使用指南
實現方式(按照從簡單到復雜的順序排列): 使得訪客轉到某個地方而不是後退。 頁面包含該站點重要部分的鏈接,如主頁或站點地圖。不要僅僅告訴他們檢查拼寫。使用文本的鏈接替代圖片,因為有許多訪客不會想到點擊這個圖片。 例子:我們的站點有一個主頁的返回鏈接。這是實現友好反饋的最低限度。 此外,我們還會考慮,在有效的幫助信息不足的情況下,如何通過訪客的反饋彌補錯誤。 需要包括一個指向網站管理員的email鏈接,或者一個用於提交丟失鏈接的表格。 相對於發送email,訪客更喜歡使用提交表格。 加入一個搜索框用於搜索站點。 例:MSN在所有頁面的底部都有一個搜索框,同時也鏈向站點的重要部分。 在站點中列出接近於訪客期望頁面的鏈接,用於推測訪客正在尋找的頁面。 你不需要采納上述所有的建議,但是這些建議一致服務於使得訪客更願意停留在你的站點的目的。 合理的404錯誤頁面至此即可以完成了,這將給訪客提供許多有價值的信息。 404錯誤頁面的設置方法: 1. 對於存在的網頁內容由於路徑改變而導致訪問不了時,可在IIS 中定義404錯誤指向一個動態頁面,在頁面裡面使用301永久重定向跳轉到新的地址,此時服務器返回301狀態碼。 2、設置404指向一個設計好的html 文件,此時頁面返回的404狀態碼。 現在的idc提供商基本都提供404設置的功能,直接上傳文件設置即可。在IIs中設置方法:打開IIS管理器-->點擊要設置自定義404的網站的屬性-->點擊自定義錯誤選項-->選中404頁-->選中並打開編輯屬性-->設置成 URL --> URL 裡填寫“/err404.html”-->按確定退出再把做好的err404.html 頁面上傳到網站根目錄下。此處在“消息類型”中一定要選擇“文件”或“默認值”,而不要選擇“......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved