您的位置:首页 > 运维架构 > Nginx

Nginx Rewrite规则初探

2015-09-29 20:45 603 查看
Nginx  rewrite(nginx url地址重写)
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

if        指令

规则语法:
if ($http_user_agent ~MSIE){
rewrite ^(.*)$/msie/$1 break;
}

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

rewrite 语法规则:

变量名:

    变量名可以使用"="或"!="运算符

     ~  符号表示区分大小写字母匹配

     ~* 符号表示不区分大小写字母匹配

     !~ 和 !~ 与~  !~ 相反

     -f 和 !-f   用来判断文件是否存在

     -d 和 !-d   用来判断目录是否存在

     -e 和 !-e   用来判断文件或目录是否存在

     -x 和 !-x   用来判断文件是否可以执行

      也支持$1到$9位置参数

return指令

示例:,如果访问的URL以.sh .bash 结尾,返回状态码403
location ~ .*\.(sh|bash)?$
{
return 403;
}

    

rewrite指令

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


实例:将访问/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;
}


rewrite规则编写实例

1,将原来要访问/b的目录重写为/bbs

     核心语句:

[
rewrite ^/b/?$ /bbs permannet;


2,根据不同的浏览器将得到不同的结果。
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;
}


3.防止盗链:
根据Referer信息防止盗链,代码如下:
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 }


4.实现域名跳转:

server {
listen       80;
server_name  cheng.example.com;
write ^(.*)$  http://zhang.example.com/$1 permanent;
location / {
root   html;
index  index.html index.htm;
}
原文地址:http://blog.csdn.net/xifeijian/article/details/20955253
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: