×

linux环境Apache不支持中文URL解决办法
  

北回归线 7428

{{ttag.title}}
本帖最后由 北回归线 于 2017-4-6 16:05 编辑

一、问题现象;
最近在给公司部署一套某公司系统的时候遇到了一个问题,上传了附件后无法下载,上传英文的附件可以正常下载。于是网上查了下说是某公司的一个bug,某公司不支持GBK的编码URL导致。

二、解决方案;
相信很多人都可能遇到这样的问题,起初安装网上的办法试了下,编译的时候出现了各种问题,无从下手啊!今天总算搞定了这个问题,所有这里给大家分享下,希望对大家有帮助。
我的服务器环境:Centos6.5+某公司2.2.15+mysql+php

1、下载mod_encoding的源码包;

apache2.2.x-mod_encoding-master.zip (255.01 KB, 下载次数: 8)


2、解压mod_encoding的源码包;
[root@ps mod]# tar -xzf mod_encoding-20021209.tar.gz
[root@ps mod]# ll
总用量 288
drwxr-xr-x 3      1002 users   4096 12月  9 2002 mod_encoding-20021209

3、使用mod_encoding.c.apache2.20040616文件替换源代码包中的mod_encoding.c文件;
[root@ps mod]# cd mod_encoding-20021209
[root@ps mod_encoding-20021209]# cp ../mod_encoding.c.apache2.20040616 mod_encoding.c


4、编译iconv-hook;
[root@ps mod_encoding-20021209]# cd lib      //进入lib目录
[root@ps lib]#  ./configure --prefix=/usr            //检查软件安装环境
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
....................
[root@ps lib]# make   //编译后将会生成文件
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.     -g -O2 -c iconv_hook.c
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -Wp,-MD,.deps/iconv_hook.pp -c iconv_hook.c  -fPIC -DPIC -o .libs/iconv_hook.lo
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -Wp,-MD,.deps/iconv_hook.pp -c iconv_hook.c -o iconv_hook.o >/dev/null 2>&1
mv -f .libs/iconv_hook.lo iconv_hook.lo
..................


5、安装某公司的apxs模块拓展工具
[root@ps lib]# yum install httpd-devel.x86_64

6、编译并安装mod_encoding.so模块

a、在编译安装前,先执行补丁,否则下面的编译可能会报错,如果还是依然报错,建议多执行几次补丁操作试试:
[root@ps mod_encoding-20021209]# patch -p0 < ../mod_encoding.c-apache2.2-20060520.patch
patching file mod_encoding.c
[root@ps mod_encoding-20021209]#
[root@ps mod_encoding-20021209]# patch -p0 < ../mod_encoding.c-apache2.2-20060520.patch
patching file mod_encoding.c
Reversed (or previously applied) patch detected!  Assume -R? [n]
Apply anyway? [n]
Skipping patch.
5 out of 5 hunks ignored -- saving rejects to file mod_encoding.c.rej

b、检查软件的部署环境
[root@ps mod_encoding-20021209]# ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/include
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... missing
checking for working autoconf... missing
c、编译并生成文件
[root@ps mod_encoding-20021209]# make
/usr/sbin/apxs -c  -I/usr/include  -liconv_hook mod_encoding.c
/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd  -I/usr/include/apr-1   -I/usr/include/apr-1  -I/usr/include  -c -o mod_encoding.lo mod_encoding.c && touch mod_encoding.slo
mod_encoding.c:362: 警告:从不兼容的指针类型初始化
mod_encoding.c:366: 警告:从不兼容的指针类型初始化
mod_encoding.c:370: 警告:从不兼容的指针类型初始化
mod_encoding.c:374: 警告:从不兼容的指针类型初始化
mod_encoding.c:378: 警告:从不兼容的指针类型初始化
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_encoding.la  -liconv_hook -rpath /usr/lib64/httpd/modules -module -avoid-version    mod_encoding.lo
[root@ps mod_encoding-20021209]#
d、查看生成的文件
[root@ps mod_encoding-20021209]# ll
总用量 288
-rw-r--r-- 1 root users 17548 4月   6 14:45 mod_encoding.c
-rw-r--r-- 1 root users 17548 4月   6 14:44 mod_encoding.c.orig
-rw-r--r-- 1 root root   3591 4月   6 14:45 mod_encoding.c.rej
-rw-r--r-- 1 root root    968 4月   6 14:45 mod_encoding.la
-rw-r--r-- 1 root root    291 4月   6 14:45 mod_encoding.lo
-rw-r--r-- 1 root root  49352 4月   6 14:45 mod_encoding.o
-rw-r--r-- 1 root root      0 4月   6 14:45 mod_encoding.slo
e、生成最终的某公司模块文件mod_encoding.so文件
[root@ps mod_encoding-20021209]# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook

7、安装并应用模块;

a、将生成的模块文件复制到某公司模块目录
cp mod_encoding.so /etc/httpd/modules/


b、修改某公司配置文件
LoadModule encoding_module modules/mod_encoding.so

<IfModule mod_encoding.c>
          EncodingEngine on
          NormalizeUsername on
          SetServerEncoding GBK
          DefaultClientEncoding UTF-8 GBK GB2312
  </IfModule>


c、重启某公司服务
service httpd restart


打赏鼓励作者,期待更多好文!

打赏
2人已打赏

Sangfor_闪电回_朱丽 发表于 2017-4-6 15:25
  
方便说明一下,是哪个某公司系统 么?方便小伙伴们参考
北纬 发表于 2017-4-26 19:40
  
刚好遇到这个问题
大蒜头 发表于 2017-5-4 17:56
  
666                           
新手541661 发表于 2017-5-15 15:08
  
这个厉害
zoou 发表于 2017-8-14 11:14
  
这个分析相当到位,以前也遇到过,但是没有解决。学习了。
花开荼靡_ 发表于 2024-7-20 09:38
  
非常好的实践教程,谢谢分享
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
【 社区to talk】
技术笔记
干货满满
每日一问
信服课堂视频
新版本体验
GIF动图学习
技术咨询
功能体验
2023技术争霸赛专题
产品连连看
安装部署配置
通用技术
秒懂零信任
技术晨报
自助服务平台操作指引
原创分享
标准化排查
排障笔记本
玩转零信任
排障那些事
SDP百科
深信服技术支持平台
POC测试案例
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
升级&主动服务
高频问题集锦
社区新周刊
全能先锋系列
云化安全能力

本版版主

12
185
6

发帖

粉丝

关注

121
315
351

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人