我们经常在论坛上看到这样的求救贴: 
为什么我看不了网站上中文文件名的文件?这时一定会有好心的大侠告诉说,到IE6的工具,Internet选项, 高级里,把"总是以UTF-8发送URL"去掉.... 于是世界清净了。为什么会这样?
 
我们来看这样一个例子:
如果是在浏览器里输入这样一个路径 : http://hi.baidu.com/uroot/中文.mp3.对对于包含中文URL来说,那么浏览器会把"中文" 以类似%HH的方式编码. 那么,http 客户端到底是以GBK编码还是UTF-8编码呢?
在IE里,有这样一个选项,“总以UTF-8发送URL”.而且是缺省的设置。但不是所有的http 客户端都是这样。比如Firefox就是直接以GBK编码(在这里,我们都假定操作系统为Windows简体中文版本)于是,Apache服务器端在获得这样的url时,就可能出现传过来的编码不一样的请求,但是他们请求的目的其实是一个文件。
 
下面看Apache如何处理这2个请求:
对于Apache 来说,它很郁闷的是URL中不会包含任何编码信息,那么它能做的事情最简单的就是接收到文件名后,就原样对文件系统(操作系统)直接发起请求读这个名字的文件。
对于文件系统来说,肯定是一种编码,例如 UTF-8.那么就意味着apache以GBK编码文件名的请求反馈结果是没找到~~~~ 于是Apache 给http 客户端 送了一个对不起, 404... 
所以从用户端看就有很奇怪的事情发生了:用IE(选中UTF-8发送URL)访问(下载)这个mp3文件URL,一切正常。用下载工具比如flashget 或者firefox 访问(下载)这个文件,得到404文件不存在的错误!
通过上面的解释, 对于IE访问www网站中文文件名文件访问出404文件没找到错误的情况,IE把"总是以UTF-8发送URL"选项uncheck的就可以成功的www服务器,我们可以推测出WWW服务器端文件系统采用了GBK编码。
那么我们有没有办法解决这个问题呢,让Apache 管它是UTF-8还是GBK通吃.要知道,总会有些特殊需求在URL中有中文的。虽然我们极力避免这样去做。
 
废话说了一堆,下面是使用mod_encoding解决这个问题的一个方法:
 
1.下载mod_encoding和安装patch补丁
http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
# cd /data/soft
# tar -xvf mod_encoding-20021209.tar.gz
 
另外这里必须要打一个apache的补丁。否则make也会出apxs rc=65536的错误。
http://d.nicwind.com/files/mod_encoding_64.tar.gz
# tar -xvf mod_encoding_64
# cd mod_encoding_64
# cp mod_encoding.c-apache2.2-20060520.patch /data/soft/mod_encoding-20021209
# patch -p0 < mod_encoding.c-apache2.2-20060520.patch
 
2.安装 iconv-hook
# cd mod_encoding-20021209/lib
# ./configure --prefix=/usr
# make
# make install
# ldconfig
 
3.编译 mod_encoding
# cd ..
# ./configure --with-apxs=/data/apache/bin/apxs --with-iconv-hook=/usr/local/include
查看是否已经生成了mod_encoding.o文件,如果有,则make成功继续下边的操作。
# make
# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook
 
4 配置 apache 
# cd /data/apache/conf/httpd.conf
 
LoadModule headers_module modules/mod_headers.so
LoadModule encoding_module modules/mod_encoding.so
 
Header add MS-Author-Via "DAV"
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
 
4.重启 apache,如果没有报错则成功。
# /data/apache/bin/apachel restart

Apache+mod_encoding解决URL中文编码问题的更多相关文章

  1. Apache2.2+mod_encoding解决URL中文编码问题

    我们经常在论坛上看到这样的求救贴: 为什么我看不了网站上中文文件名的文件?这时一定会有好心的大侠告诉说,到IE6的工具,Internet选项, 高级里,把"总是以UTF-8发送URL&quo ...

  2. 解决URL请求中的中文乱码问题

    解决URL提交中文出现乱码有两种办法:1.请求端的中字符有encodeURI进行一次转码,如: var url="/getUser?name="+encodeURI(name);服 ...

  3. 解决URL地址中的中文乱码问题的办法

    解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...

  4. paip.配置ef_unified_filter() failed ext_filter_module mod_ext_filter.so apache 错误解决

    paip.配置ef_unified_filter() failed  ext_filter_module  mod_ext_filter.so apache 错误解决 作者Attilax  艾龙,   ...

  5. 解决URL中文乱码问题--对中文进行加密、解密处理

    解决URL中文乱码问题--对中文进行加密.解密处理 情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标 ...

  6. ubuntu eclipse 建立server 提示coud not load the tomcat server configuration at /opt/apache ...的解决方法

    ubuntu eclipse 建立server 提示coud not load the tomcat server configuration at /opt/apache ...的解决方法 & ...

  7. APACHE 服务器开启URL REWRITE模块的方法

    最近做wordpress,发现固定链接总是设置不了.后来发现是由于apache服务器的URL REWIRITE模块没有开启导致. 查询了资料之后终于设置成功,记录下步骤: 1:开启apache的url ...

  8. iOS - 网址、链接、网页地址、下载链接等正则表达式匹配(解决url包含中文不能编码的问题)

    DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母.标号中除连字符(-)外不能使用其他的标点符号.级别最低的域名写在最左边,而级别最高的域名写在最右边.由多 ...

  9. 解决Url带中文参数乱码问题

    这里我来介绍下如何配置Tomcat 来解决Url带中文参数乱码问题: 首先打开Tomcat安装目录,以Tomcat7为例,其他版本基本一样: 打开conf文件 打开server.xml 大概在70行左 ...

随机推荐

  1. SQL SERVER - 谈死锁的监控分析解决思路

    1 背景 1.1 报警情况 最近整理笔记,打算全部迁移到EVERNOTE.整理到锁这一部分,里边刚好有个自己记录下来的案例,重新整理分享下给大家. 某日中午,收到报警短信,DB死锁异常,单分钟死锁12 ...

  2. ci 框架发送邮箱

    定义数据 $config = array(    'protocol' =>'smtp',    'smtp_host'=>'ssl://smtp.163.com',    'smtp_u ...

  3. React+webpack开发环境的搭建

    首先创建项目,确保该项目已经安装了webpack和webpack-dev-server具体安装方法请参考上章所述. 在上一章说过babel是一个javascript编辑器,在react项目中使用bab ...

  4. Implement Stack using Queues leetcode

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  5. MyEclipse下安装MyBatis Generator代码反向生成工具

    一.离线方式: 在http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/下载 featur ...

  6. 2015: [Usaco2010 Feb]Chocolate Giving

    2015: [Usaco2010 Feb]Chocolate Giving Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 269  Solved: 1 ...

  7. 关于cursor的各种属性应用

    <html> <body> <p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p> <span style="cursor:au ...

  8. 【树莓派】Linux应用相关:自动删除n天前日志

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...

  9. Ubuntu14.04下CUDA7.5安装与配置

    一.下载: 在官网上下载cuda toolkit(所有需要安装都在里面包括驱动 toolkit Samples)下载网址: https://developer.nvidia.com/cuda-down ...

  10. ECMASCRIPT5新特性(转载)

    Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name   ...