傻子-王跸西的blog-WangBiXi.com's Archivers

From admin on 2012-05-10 03:07:24

【教程】调整Linux 环境让apache对中文文件名的支持

近日,有同事遇到一个奇怪问题:在开发环境,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是没有问题的。


Linux系统下设置系统字符集
查看系统已安装的字符集
命令:
locale -a 查看本地字符集
locale -m 查看所有支持的字符集

执行命令:
[sws_code language="html"] [/sws_code]
显示结果为
[sws_code language="html"] [/sws_code]
执行命令
[sws_code language="html"] [/sws_code]
显示结果为
[sws_code language="html"] [/sws_code]

设置系统默认字符集
1〉查看系统配置参数
[sws_code language="html"] [/sws_code]
修改系统配置参数
2>临时修改
[sws_code language="html"] [/sws_code]
例如:
[sws_code language="html"] [/sws_code]
注意:export修改参数仅限于当前登陆状态时有效,重启后失效,需要写入/etx/profile文件。

3〉永久修改
修改profile文件:
所有用户(不安全)
修 改/etc/profile(对所有用户都是有效的)
[sws_code language="html"] [/sws_code]
在里面加入:
[sws_code language="html"] [/sws_code]

查看完整版本: 【教程】调整Linux 环境让apache对中文文件名的支持

From lida slimming weight loss tablet on 2013-07-11 14:24:41

What's up, it is understandable paragraph along with this YouTube video; I can imagine that one can not understand this trouble-free piece of writing having with video presentation.

Tags: linux, 中文, 支持


©傻子-跸西的blog-WangBiXi.com