zoukankan      html  css  js  c++  java
  • 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;
      } 
    }
      

     

  • 相关阅读:
    Python编码和文件操作
    Python的list和tuple及dictionary
    Python代码对比
    python的基础知识
    day2 springcloud组件(nacos注册/配置中心 feign组件请求调用 gateway网关)
    springcloud与springboot版本对应关系
    git配置
    day1 分布式基础概念
    spring中的依赖注入(DI)笔记
    20210223 爱生气的书店老板(滑动窗口)
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12427788.html
Copyright © 2011-2022 走看看