Nginx实例之url重写

  url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等。

  Rewrite功能的实现是依赖于PCRE(perl兼容的正则表达式)的支持,所以在编译安装Nginx之前,需要安装PCRE库

  

  Rewrite模块语法

 1.set指令

用来设置新的变量
语法: set $variable value;
比如 set $id 3; #设置id为3

 

  2.if指令

语法为if(condition){…}     #对给定的条件condition进行判断。
a:当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false,其他情况为true。
b:直接比较变量和内容时,使用 = 或!=
c:正则表达式匹配:使用~(区分大小写)和~*(不区分大小写),取反运算!~ 和!~*
。 注意:使用正则表达式字符串一般不需要加引号,但是如果含有右花括号“}”或者分号“;”字符时,必须要给整个正则表达式加引号

其他指令:
-f和!-f用来判断请求文件是否存在
-d和!-d用来判断请求目录是否存在
-e和!-e用来判断请求的文件或者目录否存在
-x和!-x用来判断请求的文件是否可执行

例子:if (-f $request_filename){
        … #判断请求的文件是否存在,存在就执行这里面的代码块
    }

  3.return指令

该指令用于完成对请求的处理,直接向客户端响应状态的代码。和Java中的return语法类似。可以再server块和location以及if块中使用。

语法:  return code;  #code表示状态码
 或者:return URL: #返回的URL必须包含“http://”、“https://”或者直接使用“$scheme”变量(RequestScheme代表传输协议,Nginx内置变量)。没有状态码的URL将被视为一个302状态码。
 或者:return [text]; #为返回给客户端的响应体内容,支持变量的使用

  4.rewrite指令

该指令通过正则表达式的使用来改变URI.可以同时存在一个或者多个指令,按照顺序一次对URL进行匹配和处理。该指令可以在server块或location块中配置

语法:rewrite regex replacement [flag];
 rewrite是实现URL重定向的重要指令,  
 regex:用来匹配URI的正则表达式;
 replacement:匹配成功后用来替换URI中被截取内容的字符串,默认情况如果该字符串包含"http://"、"https://"开头,则不会继续向下对URI进行其他处理。直接返回重写的URI给客户端
 flag:用来设置rewrite对URI的处理行为.

flag标记说明:
last  #本条规则匹配完成后,继续向下匹配新的location URI规则
break  #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

  重写示例

1.域名跳转

server {
  listen 80;
  server_name abc.com;
  rewrite ^/(.*) http://www.abc.com/$1 permanent; # 跳转到www.abc.com网址上
}
  2.防盗链

location ~* \.(gif|jpg|png|swf|flv)$ {

  #none:表示无Referer值的情况。blocked:表示Referer值被防火墙进行伪装。server_names:表示一个或多个主机名称
  valid_referers none blocked www.vison.com www.wsvison.com;

  #这里表示Referer头域中的值是none或者blocked或者后面这些网址才会返回去正常的gif|jpg|png|swf|flv文件,否则执行下面if块代码

  if ($invalid_referer) { #匹配成功为0 ,没有匹配成功为1
    return 404;
  } 
}
  

 

 

 

 

 

posted @ 2020-03-06 17:38  鄙人取个名字好难  阅读(324)  评论(0编辑  收藏  举报