Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

让Apache支持中文目录

| Comments

Apache自身并不支持中文目录,但是目前日本的webdev提供了mod_encoding插件来支持多字节目录。 在AS5和Everest0.5pre2版本上测试通过,记录如下:

1)首先确定安装了httpd-devel包。如果没有安装之

2)从官方分别下载基本包和补丁包

#wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
#wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616

或者可以下载文末提供的已经打好补丁的压缩包

3)解压基本包,并用mod_encoding.c.apache2.20040616替代基本包里的mod_encoding.c

#tar -xzf mod_encoding-20021209.tar.gz #cd mod_encoding-20021209
#cp -f ../mod_encoding.c.apache2.20040616 mod_encoding.c 

4)编译安装iconv_look

# cd mod_encoding-20021209/lib/ 
# ./configure && make && make   install 
#echo "/usr/local/lib" >>/etc/ld.so.conf.d/local.conf
#ldconfig   

5)编译安装mod_encoding模块

 #cd mod_encoding-20021209 
 #./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/local/include #make & make install 

注:如果5)步骤出现下面的报错 mod_encoding.c:235: error: 'regex_t' undeclared (first use in this function) 请在mod_encoding.c文件中加上regex.h,然后再编译。

6)安装动态库 如果前面步骤都没有错误,则应该在当前目录能看到mod_encoding.o文件,接下来该目标文件做成共享的动态库

# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall   -L/usr/local/lib -Llib -liconv_hook

将生成的mod_encoding.so文件拷贝到Apache的动态模块库目录中去

#cp mod_encoding.so /usr/lib/httpd/modules/  

我们采用创建新的conf文件来加载该so文件

 #cat >/etc/httpd/conf.d/cndir.conf 
 LoadModule encoding_module modules/mod_encoding.so 
 Header add 
 MS-Author-Via "DAV" 
 EncodingEngine on 
 NormalizeUsername on 
 SetServerEncoding UTF-8 
 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   

当然SetServerEncoding UTF-8这样可以设置成你希望的默认编码,比如GBK,比如GB2312. 重启Apache。现在测试中文目录,看看效果。

在没有加载mod_encoding.so模块前的测试如下:

image

加载后的效果如下

image

mod_encoding下载

Comments