欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux 能认识中文名 的处理 有大用

shiping1 的头像

(百度空间里有大用) (下面的方法绝对有大用)

apache2.2.x下支持中文的URL是用Mod_encoding

我们用到的组件~~ mod_encoding

1.我们来把下载的东西都下载完全了~  在下面的 附件 里 有这三个文件

http://www.aiyomama.cn/qz/mod_encoding-20021209.tar.gz

http://www.aiyomama.cn/qz/mod_encoding.c.apache2.20040616

http://www.aiyomama.cn/qz/mod_encoding.c-apache2.2-20060520.patch

下载的东西全部放在/usr/local/src下面~
=====================================================
2.  安装mod_encoding-20021209.tar.gz

tar zxvf mod_encoding-20021209.tar.gz

cp mod_encoding.c.apache2.20040616  mod_encoding-20021209/mod_encoding.c

cp mod_encoding.c-apache2.2-20060520.patch mod_encoding-20021209/

cd mod_encoding-20021209 

patch -p0 < mod_encoding.c-apache2.2-20060520.patch

==============================================

3.安装iconv-hook

cd mod_encoding-20021209/lib

./configure
make
make install

cp iconv*  /usr/local/lib

==============================================
4. vi /etc/ld.so.conf        可以见 /node-admin/1571  相应地方的处理

在最下面添加一行  /usr/local/lib

有的就别加了

然后  ldconfig


===================================
5.  cd  mod_encoding-20021209/

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-iconv-hook=/usr/

(注意 涉及到apache的地方要这个服务器的apache的路径
如果是wdcp  就是 /www/wdlinux/apache/bin/apxs)


make

gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook


cp mod_encoding.so /usr/local/apache2/modules
注:如果安装的是WDCP,重启apache会失败,需要将mod_encoding.so复制到/www/wdlinux/httpd-2.2.22/modules下,
=============================================================
6.  编辑apache的配置文件 httpd.conf
如果是wdcp   /www/wdlinux/httpd-2.2.22/conf/httpd.conf
添加

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



以上的增加是在
最后的module下面进行(
也就是最后一个<IfModule
的后面添加的)的 (我就是在wdcp中是这么弄的 httpd.conf 中)


然后重新启动apache~~

然后运行  http://www.xxx.com/哈哈.html
http://www.xxx.com/哈哈.html

 

 

(二)乔大海的个人网站的方法

Linux下让Apache2.2.9支持中文URL路径(mod_encoding)

多的不说了,就是在Linux下通过Apache访问中文(据测试,日文也可以)的url路径的模块.日本人开发的,用不用随你.

我的环境:CentOS 5,Apache 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.install iconv-hook

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>

#—LoadModule headers_module modules/mod_headers.soLoadModule encoding_module modules/mod_encoding.so
<IfModule mod_headers.c>Header add MS-Author-Via “DAV”</IfModule>
<IfModule mod_encoding.c>EncodingEngine onNormalizeUsername onSetServerEncoding GBKDefaultClientEncoding UTF-8 GBK GB2312AddClientEncoding “(Microsoft .* DAV $)” UTF-8 GBK GB2312AddClientEncoding “Microsoft .* DAV” UTF-8 GBK GB2312AddClientEncoding “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脚本并存.

 

 

(三)doc文档

 

Linux上配置Apache,支持中文名称文件下载的方法

Linux上的Apache默认不支持中文名的文件下载,有一段时间让我很郁闷,因为一个项目中,客户要求能够下载中文名的文件,后来不得已在程序里面做处理得以解决,但一直有点不甘心,觉得Apache肯定可以支持的,刚好最近在网上看到了mod_encoding这个模块,MS这是个日本人写的(先Bs一下日本,然后把他们的好东西拿来用 )。
  首先从这里下载文件:mod_encoding-20021209.tar.gz 这个模块包,这个包默认是支持Apache 1.3.X的,如果想在Apache2上使用的话,需要在下载另外一个文件文件,在这里下载
  配置步骤如下:
#cp mod_encoding-20021209.tar.gz /usr/local/
#cd /usr/local/
#tar -zxvf mod_encoding-20021209.tar.gz
如果是Apache2
#cp mod_encoding.c.apache2.20020616 /usr/local/mod_encoding-20021209/mod_encoding.c
# cd mod_encoding-20021209/lib
# ./configure
# make
# make install
# vi /etc/ld.so.conf
在最下面添加/usr/local/lib 保存退出。
#PATH="$PATH:/sbin"
#ldconfig
#cd /usr/local/mod_encoding-20021209
#./configure --with-apxs=/www/bin/apxs --with-iconv-hook=/usr/local/include
上面的/www修改为你的Apache安装目录
#make
#ls –l
查看是否已经生成了mod_encoding.o文件,如果有,则make成功继续下边的操作。
#gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
#cp mod_encoding.so /usr/lib/httpd/modules/mod_encoding.so
在配制Apache配置文件
#vi /www/conf/httpd.conf
在文件最后添加:
LoadModule encoding_module /usr/lib/httpd/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>
大功告成,重启Apache之后,怎么样?以上方法在RedHat 9上测试通过

如果编译时出现以下错误提示:
apxs:Error: Command failed with rc=65536
.
make: *** [mod_encoding.so] Error 1

原因很明显,是regex.h未包含进来,解决办法也很简单,用vi打开mod_encoding.c,
在#include <httpd.h>那一段的前面加上如下一行:
#include <regex.h>

再编译应该就可以通过了

 

 

 

 

 

 

 

普通分类: