posts - 122,  comments - 25,  trackbacks - 0
          近日,有同事遇到一個奇怪問題:在開發環境,apache能正常支持中文文件下載,但切換到測試環境就404錯誤,找不文件,兩個環境都是linux系統。我起先懷疑的是linux下需要對apache進行配置,以支持中文名。但研究了一下兩個環境的配置,開發環境除apache版本高了點外,并沒有其他特殊配置。所以懷疑版本問題,又把開發環境的apache及配置同步到了測試環境,重啟依然無效。

          折騰半天,基本上可以判定這個問題應該與apache配置和版本無關了。

          網上google了一把,有很多關于mod_encoding.so模塊實現中文支持和IE瀏覽器中取消"發送UTF-8 URL"的設置,考慮到開發環境并沒有加入額外的module,也沒設置IE選項,所以也沒在意這些方案,況且這兩個方案也不便于生產環境布署或實際應用。

          后來,又請教了SA和其他同學,還是沒有結果。只能繼續摸索,查找原因。通過兩個環境的反復比較,終于發現了問題所在:

          通過 locale 查看了系統的字符集,開發機上是en_US.UTF-8,而測試機上是zh_CN.GBK;開發機上顯示的中文文件名是亂碼,測試機上顯示正常,但反而顯示為亂碼的開發機上能被下載,而測試機上顯示正常的文件不能被下載。后來,將測試環境的字符集也設為:en_US.UTF-8,并從svn重新遷出了中文名的文件,發現確實可以被讀取到。

          分析一下原因,ie客戶是發送"UTF-8 URL"到apache,apache以utf-8編碼的文件名查找相關目錄下的文件,如果此時中文文件是以GBK或其他字符集保存時,就無法找到匹配的文件。所以網上說的IE瀏覽器中取消"發送UTF-8 URL"的設置就有效的說法就可以解釋了。

          結論:linux環境下apache中文文件下載支持與該文件的字符集有關,只要創建或從svn遷出中文文件文件時,linux系統為UTF-8的字符集,或中文文件名以UTF-8編碼的文件,即能被apache正確讀取。網上有資料說,apache 2.x 以上版本即支持中文文件名,雖然未經驗證,但至少可以肯定apache 2.0.55、2.0.63是沒有問題的。
          posted on 2009-03-13 21:37 josson 閱讀(1154) 評論(0)  編輯  收藏 所屬分類: Linux
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武鸣县| 井研县| 泰宁县| 台江县| 蚌埠市| 西畴县| 清苑县| 汤原县| 桐梓县| 贡觉县| 罗城| 临漳县| 屏边| 怀来县| 通辽市| 松阳县| 观塘区| 旬邑县| 淮滨县| 临沭县| 景宁| 崇州市| 新巴尔虎右旗| 田林县| 湖南省| 墨江| 邵阳县| 阿克陶县| 郁南县| 林周县| 临城县| 芦溪县| 子长县| 凤城市| 邢台市| 武冈市| 广平县| 乌拉特后旗| 镇平县| 阳原县| 东阳市|