设为首页 收藏本站
查看: 1050|回复: 0

[经验分享] nginx的中文rewrite规则

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-2-14 14:39:15 | 显示全部楼层 |阅读模式
在默认情况下,nginx的rewrite是不支持UTF8匹配的

如果要让^/(..)$匹配到2个汉字字符,得开启nginx对utf8字符的正则支持,准确点说是开启nginx使用的pcre库的对utf8字符的支持。

需要使用pcre7.9以上的版本才支持中文rewrite,另外,编译PCRE时一定要开启utf8的支持,即使用--enable-utf8参数 ,检查系统的PCRE版本和是否支持UTF8编码可以使用。
pcretest -C

PCRE version 8.13 2011-08-16
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

显示UTF-8就是支持UTF8编码

如果nginx调用的PCRE为7.9以下的版本,
使用 rewrite “(*UTF8)^/(..)$” /2个字符文章.html break; 这种形式的重写,在执行nginx -t检查时会出现如下的错误提示:
[emerg]: pcre_compile() failed: (*VERB) not recognized in “(*UTF8)^、……
如果Nginx调用的是7.9以上版本的PCRE,但是PCRE安装时没打开UTF8的支持开关,则会出现如下的错误提示:

nginx: [emerg] pcre_compile() failed: this version of PCRE is not compiled with PCRE_UTF8 support in “(*UTF8)^/…

解决办法是安装最新版本的的PCRE,并打开UTF8支持,方法如下(以当前8.13版的PCRE为例):
wget ftp://ftp.csx.cam.ac.uk/pub/soft ... re/pcre-8.13.tar.gz
tar zxvf pcre-8.13.tar.gz
cd pcre-8.13
./configure --enable-utf8 --enable-unicode-properties
make
make install
然后重新编译安装Nginx。
Nginx默认会打开rewrite模块,并会自动查找系统上已经安装了的PCRE。
如果Nginx查找不到已经安装在系统上的PCRE, 或者系统上有多个PCRE, nginx调用了不支持UTF8的、或低版本的PCRE时(我遇到了后一种情况,并花费了很长的时间解决这个问题,这也是我为什么写这篇总结文章在这里给大家分享的原因。。。),可以在编译安装Nginx时指定PCRE源文件。
例如:
wget ftp://ftp.csx.cam.ac.uk/pub/soft ... re/pcre-8.13.tar.gz
tar zxvf pcre-8.13.tar.gz
wget http://nginx.org/download/nginx-1.0.8.tar.gz
tar zxvf nginx-1.0.8.tar.gz
cd nginx-1.0.8
./configure --with-pcre=../pcre-8.13
注意,如果接着直接
make && make install
的话, PCRE因为没有启用UTF8, nginx将不能支持UTF8重写, 所以在这一种,我动了一点小手脚:
打开./objs/Makefile 文件,找到以下段落:
../pcre-8.13/Makefile: objs/Makefilecd ../pcre-8.13 && if [ -f Makefile ]; then $(MAKE) distclean; fi && CC="$(CC)" CFLAGS="-O2 -fomit-frame-pointer -pipe "
./configure --disable-shared
在–disable-shared后加上 –enable-utf8和 –enable-unicode-properties参数,
即变成:../pcre-8.13/Makefile: objs/Makefile
cd ../pcre-8.13 && if [ -f Makefile ]; then $(MAKE) distclean; fi && CC="$(CC)" CFLAGS="-O2 -fomit-frame-pointer -pipe "
./configure --disable-shared --enable-utf8 --enable-unicode-properties


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-14951-1-1.html 上篇帖子: nginx使用cronolog切割日志安装、部署、应用测试 下篇帖子: 实现Nginx通过反代对Java环境和Perl环境的支持 中文
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表