欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Linux上配置Apache,支持中文名称文件下载的方法

shiping1 的头像
Linux上配置Apache,支持中文名称文件下载的方法
Linux上的Apache默认不支持中文名的文件下载,有一段时间让我很郁闷,因为一个项目中,客户要求能够下载中文名的文件,后来不得已在程序里面做处理得以解决,但一直有点不甘心,觉得Apache肯定可以支持的,刚好最近在网上看到了mod_encoding这个模块,MS这是个日本人写的(先Bs一下日本,然后把他们的好东西拿来用 )。 
  首先从这里下载文件:mod_encoding-20021209.tar.gz 这个模块包,这个包默认是支持Apache 1.3.X的,如果想在Apache2上使用的话,需要在下载另外一个文件文件,在这里下载
  配置步骤如下: 
#cp mod_encoding-20021209.tar.gz /usr/local/ 
#cd /usr/local/ 
#tar -zxvf mod_encoding-20021209.tar.gz 
如果是Apache2 
#cp mod_encoding.c.apache2.20020616 /usr/local/mod_encoding-20021209/mod_encoding.c 
# cd mod_encoding-20021209/lib 
# ./configure 
# make 
# make install 
# vi /etc/ld.so.conf 
在最下面添加/usr/local/lib 保存退出。 
#PATH="$PATH:/sbin" 
#ldconfig 
#cd /usr/local/mod_encoding-20021209 
#./configure --with-apxs=/www/bin/apxs --with-iconv-hook=/usr/local/include 
上面的/www修改为你的Apache安装目录 
#make 
#ls –l 
查看是否已经生成了mod_encoding.o文件,如果有,则make成功继续下边的操作。 
#gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook 
#cp mod_encoding.so /usr/lib/httpd/modules/mod_encoding.so 
在配制Apache配置文件 
#vi /www/conf/httpd.conf 
在文件最后添加: 
LoadModule encoding_module /usr/lib/httpd/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>
大功告成,重启Apache之后,怎么样?以上方法在RedHat 9上测试通过
如果编译时出现以下错误提示:
apxs:Error: Command failed with rc=65536
.
make: *** [mod_encoding.so] Error 1

原因很明显,是regex.h未包含进来,解决办法也很简单,用vi打开mod_encoding.c,
在#include <httpd.h>那一段的前面加上如下一行:
#include <regex.h>

再编译应该就可以通过了
普通分类: