百度首页 | 百度空间
 
查看文章
 
[Server]Windows平台上的mod_encoding.dll For Apache 2.2 的编译和配置方法 2008.1.31
2008-01-31 13:23
       作者:Tank http://hi.baidu.com/uroot   2008.1.31 Tank原创,转载请保留本出处
  
   更新: 1.提供编译好的mod_encoding.dll Fpr Apache 2.2 Win32 下载地址 2008.7.23
                2.增加配置方法说明
编译
      前日写篇[Linux]Apache2.2+mod_encoding解决URL中文编码问题-2008.1.8的文章.有网友咨询Apache 运行在Windows Server 2003平台上如何处理。由于mod_encoding没有提供For Apache 2.2 的Windows 版本,Google了一通无现成dll可用,于是试着自己在Windows 平台编译了mod_encoding.dll.将过程贴出分享:
    mod_encoding 使用libiconv,所以,首先需要一个iconv的win32版本。 libiconv 的老家是 http://www.gnu.org/software/libiconv/
我在这里找到一个libiconv的windows版本:
http://www.zlatkovic.com/pub/libxml/
下载释放到某个目录,例如C:\iconv-1.9.2.win32
  
   开发环境:Windows XP, VS 2005,已经安装Apache 2.2.8 类似mod_limitipconn 编译环境

   Vs2005新建立一个dll项目 项目名称mod_encoding
   加入mod_encoding.c 这个文件从打好补丁的linux版本直接拿过来。参考相关文章2.

修改头文件引用方式#include "httpd.h"
   #include "iconv.h"
    作者:Tank http://hi.baidu.com/uroot 原创
   配置 项目属性,附加 include目录 和链接附加依赖项, 可参考相关文章1中配置, 记得需要加入iconv的lib文件,include目录
     这时候编译可以通过。Link出错。由于Linux C index 函数的原因.
    替换index 为win32 的strstr .
    重新编译通过。
---------------------------------------------------------------------------------------
配置
   httpd.conf中 配置文件写法同Linux版本相同.

使用环境:apache 2.2.x ,WIndows Server 2003 or Windows XP
首先保证你的apache2.2.x能正常启动,并提供服务。IE访问服务器HTTP时出现It works 字样。
1:你需要到http://www.zlatkovic.com/pub/libxml/ 下载一个iconv-1.9.2 的 iconv.dll 放到windows system32目录.如果链接iconv时选择静态链接库iconv_a.lib.则不需要此步骤。其他如MSVCRT80.DLL等,如果需要,一并部署到目标Server 的system32目录.
2:拷贝mod_encoding.dll到Apache modules目录。比如C:\apache2\modules
3.修改apache的conf子目录中的配置文件: httpd.conf
加入如下配置:
LoadModule headers_module modules/mod_headers.so
##mod_headers必须加载
LoadModule encoding_module modules/mod_encoding.dll
<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>
然后重新启动apache 。 如果apache启动出错,请看apache 安装目录下logs子目录的error.log的错误提示.


    (Tank注:因无条件测试,不能保证此dll能正常使用,请自行测试)
  
(Tank注2:有网友反馈在Windows Server 2003上可正常使用)
    (留言中,jaco的建议很有道理,不是每个人都常备一个vs200x的开发环境,由于没有合适的server 空间提供dll下载,所以朋友如果需要编译好的dll,请给我留言,不知道为什么,baidu的留言有时会莫名其妙的没有了。....前两位的留言就不见了.)

   更新,下载地址如下:
    链接在 坦克工厂@blogbus.com mod_encoding.dll 下载地址页面 (博客大巴有文件防盗链设置,不能直接从百度链接到文件)

1:
Windows 2003 平台 Apache 2.2.6 +mod_limitipconn+ PHP 5 + SQL SERVER 2005 配置 -2007.11.08
2:
[Linux]Apache2.2+mod_encoding解决URL中文编码问题-2008.1.8

类别:linux/win/server | 添加到搜藏 | 浏览() | 评论 (4)
 
网友评论:
1
2008-03-07 15:56
问个相关问题,我的php程序是将中文文件名进行urlencode编码存入数据库中,使用apache1.3.7版本可以直接用数据库中的编码地址进行访问,但换成了apache2.2版本后就不行了,开启apache目录资源浏览功能看到的资源地址编码和数据库中完全不同,这应该怎么解决?
文件名称:
12048706586549348088友情链接.gif
数据库内的存储编码:
12048706586549348088%D3%D1%C7%E9%C1%B4%BD%D3.gif
apache资源链接地址:
12048706586549348088%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5.gif
 
2
2008-03-07 17:57
数据库内的存储编码:
12048706586549348088%D3%D1%C7%E9%C1%B4%BD%D3.gif 这个地址是GBK编码
12048706586549348088%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5.gif
UTF8编码

可以在apache2.2中用这个mod_encoding把所有的GBK编码url请求转化为UTF8编码url,就像直接用apache目录流浪功能看到的地址一样就应该可以。
 
6
2008-07-15 11:34
你好,能不能发一份编译好的DLL到我的邮箱,谢谢!
 
7
2008-07-20 21:39
麻烦把编译好的文件分享一份到我的邮箱,不甚感激
Simxinzi@hotmail.com
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu