近日,有同事遇到一個(gè)奇怪問(wèn)題:在開(kāi)發(fā)環(huán)境,apache能正常支持中文文件下載,但切換到測(cè)試環(huán)境就404錯(cuò)誤,找不文件,兩個(gè)環(huán)境都是linux系統(tǒng)。我起先懷疑的是linux下需要對(duì)apache進(jìn)行配置,以支持中文名。但研究了一下兩個(gè)環(huán)境的配置,開(kāi)發(fā)環(huán)境除apache版本高了點(diǎn)外,并沒(méi)有其他特殊配置。所以懷疑版本問(wèn)題,又把開(kāi)發(fā)環(huán)境的apache及配置同步到了測(cè)試環(huán)境,重啟依然無(wú)效。
折騰半天,基本上可以判定這個(gè)問(wèn)題應(yīng)該與apache配置和版本無(wú)關(guān)了。
網(wǎng)上google了一把,有很多關(guān)于mod_encoding.so模塊實(shí)現(xiàn)中文支持和IE瀏覽器中取消"發(fā)送UTF-8 URL"的設(shè)置,考慮到開(kāi)發(fā)環(huán)境并沒(méi)有加入額外的module,也沒(méi)設(shè)置IE選項(xiàng),所以也沒(méi)在意這些方案,況且這兩個(gè)方案也不便于生產(chǎn)環(huán)境布署或?qū)嶋H應(yīng)用。
后來(lái),又請(qǐng)教了SA和其他同學(xué),還是沒(méi)有結(jié)果。只能繼續(xù)摸索,查找原因。通過(guò)兩個(gè)環(huán)境的反復(fù)比較,終于發(fā)現(xiàn)了問(wèn)題所在:
通過(guò) locale 查看了系統(tǒng)的字符集,開(kāi)發(fā)機(jī)上是en_US.UTF-8,而測(cè)試機(jī)上是zh_CN.GBK;開(kāi)發(fā)機(jī)上顯示的中文文件名是亂碼,測(cè)試機(jī)上顯示正常,但反而顯示為亂碼的開(kāi)發(fā)機(jī)上能被下載,而測(cè)試機(jī)上顯示正常的文件不能被下載。后來(lái),將測(cè)試環(huán)境的字符集也設(shè)為:en_US.UTF-8,并從svn重新遷出了中文名的文件,發(fā)現(xiàn)確實(shí)可以被讀取到。
分析一下原因,ie客戶(hù)是發(fā)送"UTF-8 URL"到apache,apache以u(píng)tf-8編碼的文件名查找相關(guān)目錄下的文件,如果此時(shí)中文文件是以GBK或其他字符集保存時(shí),就無(wú)法找到匹配的文件。所以網(wǎng)上說(shuō)的IE瀏覽器中取消"發(fā)送UTF-8 URL"的設(shè)置就有效的說(shuō)法就可以解釋了。
結(jié)論:linux環(huán)境下apache中文文件下載支持與該文件的字符集有關(guān),只要?jiǎng)?chuàng)建或從svn遷出中文文件文件時(shí),linux系統(tǒng)為UTF-8的字符集,或中文文件名以UTF-8編碼的文件,即能被apache正確讀取。網(wǎng)上有資料說(shuō),apache 2.x 以上版本即支持中文文件名,雖然未經(jīng)驗(yàn)證,但至少可以肯定apache 2.0.55、2.0.63是沒(méi)有問(wèn)題的。
posted on 2009-03-13 21:37
josson 閱讀(1146)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Linux