今天发现,FTP里的中文名字的文件都不能下载.之前就是win的,后来改到Linux,用NTFS加载,再后来,也转为Linux的格式了.
刚弄好时,好像是能下载的,都不知当时是怎么检查的了.而且,前两天才发现,上次整理的过程中,还丢了很多的文件,唉,可现在全都没了.真可惜,有点欲哭无泪的感觉,同时也发现这些文件都不能下载,怪事了
后在网上搜了下资料,就发现了下面这些.
linux下的apache,不支持中文地址的
如 http://localhost/下载/ 或 http://localhost/下载/电子书.rar
要支持中文名字,安装个 mod_encoding 模块就可以了
wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
# tar zxfv mod_encoding-20021209.tar.gz
# cp mod_encoding.c.apache2.20020616 mod_encoding-20021209/mod_encoding.c
■ iconv_hook编译和安装
安装mod_encoding前首先需要安装iconv_hook。
$ cd mod_encoding-20021209/lib$ ./configure$ make# make install
完成上面操作后,iconv_hook相关so文件放到/usr/local/lib下面。
要操作系统系统能够搜索到该so文件,需要完成一下几行操作
打开/etc/ld.so.conf文件,添加一行指向iconv_book的所在路径,即"/usr/local/lib"
# vi /etc/ld.so.conf/usr/local/lib
[Esc]、[:]、[w]、[q] 保存退出。
# PATH="$PATH:/sbin"
# ldconfig
■ mod_encoding模块的编译
进入mod_encoding-20021209.tar.gz的解压目录,即mod_encoding-20021209
# ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/local/include/iconv_hook/
# make
#ls -l mod_encoding.o
查看是否已经生成了mod_encoding.o文件,如果是,则make成功继续下边的操作。
# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
生成mod_encoding.so文件,将该文件拷贝到你的模块存放目录,一般为${APACHE_HOME}/modules/
# cp mod_encoding.so /usr/local/apache/modules/mod_encoding.so
■ httpd.confd的设定
LoadModule encoding_module modules/mod_encoding.so
<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>
如顺利完成,上面那些中文都可以下载了
这里只是将所有的中文都转换成UTF-8格式的传输了,我想,如果在加载分区的时候,指定为UTF-8字符来加载,也许可以不用装这个也可以,没测试过,不好下定论.
参考原文 http://blog.51766.com/page/zsc/Weblog/1141808884223?catname=