本地测试环境为apache2.2.31,PHP5.3.27,操作系统为RHEL6.4x86_64,使用mod_encoding工具使apache支持中文附件名,比如http://www.example.com/合同.rar
1.先修改操作系统的语言环境,使linux本地支持中文,可以查看中文文件名
修改/etc/sysconfig/i18n文件
将LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
修改为
LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en" SYSFONT="lat0-sun16"
2.源码编译mod_encoding
下载安装文件和补丁
wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz wget tar xf mod_encoding-20021209.tar.gz cd mod_encoding-20021209
将补丁文件mod_encoding.c.apache2.20040616覆盖本地目录中的mod_encoding.c
cp ../mod_encoding.c.apache2.20040616 ./mod_encoding.c
直接在软件目录mod_encoding-20021209下载第二个补丁文件
wget http://www.aconus.com/~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch
应用补丁文件
patch -p0 <mod_encoding.c-apache2.2-20060520.patch
编译安装前需要首先安装iconv_hook,否则会报错
进入lib目录
cd lib/ #pwd /server/tools/mod_encoding-20021209/lib ./configure --prefix=/usr make make install ldconfig
编译安装mod_encoding,我的apache目录为/application/apache,需要安装apache时加入apxs模块,编译时无需make install
cd .. ./configure --with-apxs=/application/apache/bin/apxs --with-iconv-hook=/usr/include make gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook
将生成的mod_encoding.so模块复制到apache的modules目录
cp mod_encoding.so /application/apache/modules/
3.修改apache配置文件
需要headers_module支持,查看apache已经编译的模块
# apachectl -l|grep mod_head mod_headers.c
我的apache本身已经带了,就不需要添加此模块了,如果没有,需要在httpd.conf中加入下面一行,前提是模块文件存在
LoadModule headers_module modules/mod_headers.so
修改apache主配置文件httpd.conf,加入如下内容
LoadModule encoding_module modules/mod_encoding.so Header add MS-Author-Via "DAV" 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
第2-8行可以放到配置文件末尾
检查语法,并重启apache,测试中文附件能否正常下载,相关附件也可以直接从本文中下载,已经打包
时间: 2024-11-06 11:35:08