日期:2014-05-16  浏览次数:20764 次

解决linux下面 整合apache tomcat 不能直接访问含中文文名 报404错误

默认安装完Centos 5.5服务器,配置的是Aache 2.2.3+Tomcat 6.0.8 服务器上运行了多个站,均无法直接对汉字文件夹和汉字文件名的文件进行访问和下载。经查找资料发现原来是编码原因



?


解决Tomcat站的问题和方法方法是:
Tomcat的问题很奇怪,通过网站编辑工具提交的图片,到了服务器上也会变成“??”,原来网站里大量的图片都无法显示出来。
最后在对TOMCAT的日志跟踪是否发现,该日志输出的汉字也是“??”,突然想起来是否是系统的字符编码没设置好。就查看下??vi??/etc/sysconfig/i18n??发现是空白的,直接在里面增加一行如下:
LANG="zh_CN.GB18030"

然后保存重新启动,

# source /etc/sysconfig/i18n
一切就恢复正常,既可以在URL里直接访问中文名字的图片,也能上传中文文件。

解决APACHE服务的汉字编码方法:
?? 静态站和PHP站是一类,我测试了图片http://www.bnxb.com/你好.jpg??无法访问,但使用迅雷等下载工具却可以把图片、汉字文件 下载下来。上网找了文章,都说必须通过mod_encoding进行重新编码。于是我手动安装编码包,终于解决问题。以下是方法

1、下载安装包

wget http://host.bnxb.com/soft/apache/mod_encoding-2.2.0-1.i386.tar.gz


2、直接解压,并进入解压后的目录


tar zxfv mod_encoding-2.2.0-1.i386.tar.gz
cd mod_encoding-2.2.0-1.i386


3、看到2个安装包,iconv_hook-1.0.0-1.i386.rpm和mod_encoding-2.2.0-1.i386.rpm
开始安装


rpm -ivh iconv_hook-1.0.0-1.i386.rpm --nodeps --force
rpm -ivh mod_encoding-2.2.0-1.i386.rpm --nodeps --force


4、检查配置文件httpd.conf,加入以下内容
注意默认的httpd.conf是在 /etc/httpd/conf/httpd.conf
如果系统不同,或者安装的路径不同,可以通过find / -name httpd.conf 来定位这个文件
编辑httpd.conf


vi /etc/httpd/conf/httpd.conf


?? LoadModule encoding_module modules/mod_encoding.so

?? <IfModule mod_headers.c>
?????? Header add MS-Author-Via "DAV"
????</IfModule>
????<IfModule mod_encoding.c>
?????? EncodingEngine on
?????? NormalizeUsername on
?????? SetServerEncoding GBK
?????? DefaultClientEncoding UTF-8 GBK GB2312
?????? AddClientEncoding "(Microsoft .* DAV $)" UTF-8 GBK GB2312
?????? AddClientEncoding "Microsoft .* DAV" UTF-8 GBK GB2312
?????? AddClientEncoding "Microsoft-WebDAV*" UTF-8 GBK GB2312
????</IfModule>
6、#service httpd restart
7、在浏览器里直接输入 www.bnxb.com/你好.gif 图片出来了!

配置参数包括:

????* EncodingEngine (on|off)
?????? 编码转换引擎开关
???? * SetServerEncoding <enc>
?????? 设置服务器文件系统的编码
???? * AddClientEncoding <agent> <enc> [<enc> ...]
?????? 设置某个客户端请求代理的编码
???? * DefaultClientEncoding <enclist>
?????? 缺省的客户端编码清单
???? * NormalizeUsername (on|off)
?????? 是否规范话用户名。Windows平台上(特别是WinXP)认证的适合传递的用户名格式是"hostname\\username",这个不标准,自动去除hostname。