nginx下的URL的rewrite

回复 收藏
在我们的web开发中,经常会为了所谓的SEO对我们的URL进行更加好的展示和SEO的友好化的处理。那么,今天主要是简单的举例说明,如何在nginx下进行简单的url的rewrite。什么是URL的rewrite,中文可以理解为URL的重写。好了,我们来讲解nginx服务器下的URL重写把。

首先需要理解,nginx下的URL的重写即rewrite和Apache下可是不一样的哦。在nginx下,if是非常重要的。非常多的用在我们的nginx下的URL的rewrite中的哦。

Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

我们来简单的说明一下nginx下的if指令的使用例子
if ($http_user_agent ~MSIE){
rewrite ^(.*)$/msie/$1 break;
}

if (!-f$request_filename){
rewrite ^/img/(.*)$/site/$host/images/$1 last;
}


然后我们来简单的说一下关于在nginx下的URL rewrite的一些常用的变量的说明,以及它们代表的含义
变量名:
变量名可以使用"="或"!="运算符
~ 符号表示区分大小写字母匹配
~* 符号表示不区分大小写字母匹配
!~ 和 !~ 与~ !~ 相反
-f 和 !-f 用来判断文件是否存在
-d 和 !-d 用来判断目录是否存在
-e 和 !-e 用来判断文件或目录是否存在
-x 和 !-x 用来判断文件是否可以执行
也支持$1到$9位置参数

然后是关于nginx下的URL的rewrite的一些指令的说明,主要包括下面的一些指令
rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种:
last :相当于Apache里德(L)标记,表示完成rewrite;
break;本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变


本文的最后,我们来举例一些常用的关于nginx下的url rewrite的例子哦
将访问/b跳转到/bbs目录上去:
location /b {
autoindex on;
alias /usr/local/nginx/html/redhat;
rewrite ^/b/?$ /bbs permanent;

}
location /bbs {
autoindex on;
alias /usr/local/nginx/html/bbs;
}


根据不同的浏览器将得到不同的结果。
if ($http_user_agent ~ Firefox) {
rewrite ^(.*)$ /firefox/$1 break;
}

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}

if ($http_user_agent ~ Chrome) {
rewrite ^(.*)$ /chrome/$1 break;
}

防止盗链
location ~*\.(gif|jpg|png|swf|flv)${
valid_referers none blocked www.cheng.com*.test.com;
if ($invalid_referer)
rewrite ^/(.*) http://www.cheng.com/error.html
}


实现域名跳转
server {
listen 80;
server_name cheng.example.com;
write ^(.*)$ http://zhang.example.com/$1 permanent;
location / {
root html;
index index.html index.htm;
}
2016-03-27 16:40 举报
已邀请:
0

summer123

赞同来自:

write ^(.*)$ http://zhang.example.com/$1 permanent; 是rewrite的吧。。。
0

TUX

赞同来自:

{:7_234:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: