您的位置:首页 > 运维架构 > Apache

使用mod_encoding使apache支持中文附件名

2016-05-27 10:13 627 查看
本地测试环境为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[/code]应用补丁文件 
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,测试中文附件能否正常下载,相关附件也可以直接从本文中下载,已经打包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: