"
 
 
多的不说了,就是在linux下通过apache访问中文(据测试,日文也可以)的url路径的模块.日本人开发的,用不用随你.
 
我的环境:centos5,httpd 2.2.9
 
测试通过.
 
Url:http://webdav.todo.gr.jp/
 
1.download and patch
 
 
 
   cd /root/install/mod/ 
  
 
  
wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz 
  
 
  
#download patch 
  
wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616 
  
tar -xzvf mod_encoding-20021209.tar.gz 
 
 
  
新版本mod_encoding.c,选择覆盖
 
 
 
   cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c 
 
 
  
 
 
   #download patch 
  
wget http://www.aconus.com/~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch 
  
cp mod_encoding.c-apache2.2-20060520.patch mod_encoding-20021209/ 
  
 
  
cd mod_encoding-20021209 
  
 
  
patch -p0 < mod_encoding.c-apache2.2-20060520.patch 
  
 
  
 
  
<font color="red">2.install iconv-hook</font> 
  
cd /root/install/mod/mod_encoding-20021209/lib 
  
 
  
./configure 
  
make 
  
make install 
 
 
  
完成上面操作后,iconv_hook相关so文件放到/usr/local/lib下面。
 要操作系统系统能够搜索到该so文件,需要完成一下几行操作
 打开/etc/ld.so.conf文件,添加一行指向iconv_book的所在路径,即”/usr/local/lib”
 
也可以:
 
 
 
   echo  /usr/local/lib >> /etc/ld.so.conf 
  
 
  
ldconfig 
 
 
  
3.build mod_encoding
 
 
 
 
   cd /root/install/mod/mod_encoding-20021209/ 
  
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-iconv-hook=/usr/include 
  
make 
  
 
  
gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook 
  
 
  
cp mod_encoding.so /usr/local/apache2/modules 
 
 
  
4. config apache 2.2 
 
vi /usr/local/apache2/conf/httpd.conf
 
#—
 
 
 
   LoadModule headers_module modules/mod_headers.so 
  
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> 
 
 
  
#—
 
测试:
 
http://xok.la/哈哈.html
 http://xok.la/ターゲット サスペンス.html
 
都可以,到此配置完毕.
 
已知问题:
 
这个问题是mod_encoding已经先一步处理了url ,而PHP又解了一次
 例如
 x.php?s=%252B%2F%2B%2F
 那么$_GET[’s’]得到的是
 +/ /
 
 
 
   urlencode("+") = %2B 
  
urlencode("%2B") = %252B 
 
 
  
所以,这个url被decode了两次
 第一次是
 
 
 
   urldecode( "%252B%2F%2B%2F") = %2B/+/ 
  
urldecode( "%2B/+/") = +/ / 
 
 
  
解决办法:
 修改httpd.conf 将
 
 
 
   <IfModule mod_encoding.c> 
  
EncodingEngine on 
  
... 
  
... 
  
</IfModule> 
 
 
  
这一段配置移到需要的vitualHost里去,不用设置在全局配置中,这个不能和php脚本并存.
"