apach2 中文路径乱码的解决 ubuntu12.04

转载自http://www.oschina.net/question/4873_17137

原文是用centos5,我是ubuntu12.04。。。有些改动,注意哟。大红色的是我改动的亲测可用。转载请标明原址,谢谢

多的不说了,就是在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 


2. sudo apt-get install libiconv-hook-dev
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/ 
sudo apt-get install apache2-dev ##apxs命令已经没有了,现在是apxs2
./configure --with-apxs= /usr/bin/apxs2 --with-iconv-hook=/usr/include 
make 

gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook 
#这个可以不要,生成的文件在mod_encoding-20021209/.libs下,是隐藏的,要注意哟
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脚本并存.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值