分享

subversion+apache的中文路径问题解决过程

 OneDayDayUp 2016-07-26

问题:

  用subversion+apache搭建好svn服务器后,发现svn库不支持中文路径。

 

解决过程:

  • 定位问题

        创建中文路径时,subversion报错内容是:http://**********/03%20%E6%B5%8B%E8%AF%95/ path not found,大概的意思是,subversion在服务器中找不到需要创建的目录的路径。

        由于路径是存在的,因此通过分析发现,应该是编码的问题,导致路径找不到。从报错信息上看“03%20%E6%B5%8B%E8%AF%95”是属于中文的UTF-8编码。

        如果浏览器发送的是UTF-8编码导致路径找不到,那服务器用的编码肯定就不是UTF-8了,确认一下:

        1、把服务器的环境变量修改为GBK: export LANG=zh_CN.GBK

        2、touch 中文测试.txt

        3、ls 输出能看到“中文测试.txt”,证明服务器保持的目录路径是GBK编码的

 

         那问题就找到了:客户端发送的URL编码是UTF-8,但是服务器保存的是GBK,因此,就没办法对应上了。

 

 

  • 解决问题

       定位了问题就好办了(只是我以为,结果折腾了我一天),要不要求客户端发送GBK编码的路径,要不就把UTF-8编码的URL转码为GBK。第一个方法不现实,因为客户是上帝嘛,那就

       向第二个方法努力吧!

 

       问了谷哥,apache本身就是用UTF-8编码去decode路径的,没有配置可以修改,但是可以使用一个模块去做URL的转码,这个模块就是 mod_encoding,好,那就去安装吧!

 

       安装大概的过程是这样的:

Java代码  收藏代码
  1. 1.download & patch:  
  2. # wget http://webdav.todo./download/mod_encoding-20021209.tar.gz  
  3. # wget http://webdav.todo./download/experimental/mod_encoding.c.apache2.20040616  
  4. 新版本mod_encoding.c 覆盖  
  5. # cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c  
  6.   
  7. 这里必须要打一个apache 2.2的补丁。否则make也会出apxs rc=65536 之类的错误。  
  8. # wget http://www./~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch  
  9. # cd mod_encoding-20021209   
  10. # patch -p0 < mod_encoding.c-apache2.2-20060520.patch  
  11.   
  12.   
  13. 2.install iconv-hook  
  14. # cd mod_encoding-20021209/lib  
  15. # ./configure --prefix=/usr  
  16. # make  
  17. # make install  
  18. # ldconfig  
  19.   
  20. 3 build mod_encoding  
  21.   
  22. ./configure --with-apxs=/opt/apache2.2/bin/apxs --with-iconv-hook=/usr/include  
  23. make  
  24. gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook  
  25.   
  26. cp mod_encoding.so /opt/apache2.2/modules  
  27.   
  28. 4. config apache 2.2   
  29.   
  30. LoadModule headers_module modules/mod_headers.so  
  31. LoadModule encoding_module modules/mod_encoding.so  
  32. <IfModule mod_headers.c>  
  33. Header add MS-Author-Via "DAV"  
  34. </IfModule>  
  35. <IfModule mod_encoding.c>  
  36. EncodingEngine on  
  37. NormalizeUsername on  
  38. SetServerEncoding GBK  
  39. DefaultClientEncoding UTF-8 GBK GB2312  
  40. AddClientEncoding "(Microsoft .* DAV $)" UTF-8 GBK GB2312  
  41. AddClientEncoding "Microsoft .* DAV" UTF-8 GBK GB2312  
  42. AddClientEncoding "Microsoft-WebDAV*" UTF-8 GBK GB2312  
  43. </IfModule>  

 

         上面的安装过程是网上抄袭的,我按照这个去安装碰到了几个问题:

1、# cd mod_encoding-20021209/lib

         安装这个iconv_hook的时候出错,看了他的安装过程,是需要联网的,我使用的服务器不能联网,杯具!

         那只好上网找了一个iconv_hook的rpm包,直接rpm -ivh安装了

 

2、最后模块的配置如下

Java代码  收藏代码
  1. LoadFile /usr/local/apache2/modules/libiconv_hook.so.1  
  2. LoadModule encoding_module modules/mod_encoding.so  
  3. <IfModule mod_headers.c>  
  4. Header add MS-Author-Via "DAV"  
  5. </IfModule>  
  6. <IfModule mod_encoding.c>  
  7.     EncodingEngine on  
  8.     NormalizeUsername on  
  9.     SetServerEncoding UTF-8  
  10. DefaultClientEncoding UTF-8 GBK GB2312  
  11. AddClientEncoding "(Microsoft .* DAV $)" UTF-8 GBK GB2312  
  12. AddClientEncoding "Microsoft .* DAV" UTF-8 GBK GB2312  
  13. AddClientEncoding "Microsoft-WebDAV*" UTF-8 GBK GB2312  
  14. </IfModule>  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多