我是靠谱客的博主 高贵酸奶,最近开发中收集的这篇文章主要介绍Nginx(8)_return和rewrite,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

return指令

功能:

  • 停止处理请求,直接返回响应码或重定向到其他URL
  • 执行return指令后,location中后续指令将不会被执行

语法:

return code [text];
return code URL; 
return URL;

return code URL;中的code一般是重定向状态码。
重定向状态码有:

  • 301:永久重定向(HTTP1.0标准)
  • 302:临时重定向,禁止被缓存(HTTP1.0标准)
  • 303:临时重定向,禁止被缓存,允许改变方法(HTTP2.0标准)
  • 307:临时重定向,禁止被缓存,不允许改变方法(HTTP2.0标准)
  • 308:永久重定向,不允许改变方法(HTTP2.0标准)

默认值:无
上下文:server、location、if
示例:
1、配置nginx.conf,返回状态码

server {
     listen       8080;
     server_name  localhost;
     charset      utf-8;
     location / {
         return 200;
      }
}

访问路径curl localhost:8080 -i,会看到头信息的状态码
在这里插入图片描述
2、配置nginx.conf,返回状态码和文本

server {
       listen       8080;
       server_name  localhost;
       charset      utf-8;
       location / {
           return 200 "this is http code 200";
       }
   }

信息会放在data中传输,使用360浏览器打开,会显示文本信息,使用谷歌浏览器打开会下载一个文本文件。
在这里插入图片描述
3、配置nginx.conf,重定向其他URL

server {
       listen       8080;
       server_name  localhost;
       charset      utf-8;
       location / {
          return 302 /download/;
       }

      location /download/ {
          root /home/nginx;
          autoindex on;
          autoindex_exact_size off;
          autoindex_format html;
          autoindex_localtime on;
      }
}

当浏览器输入http://101.200.147.104:8080的时候会重定向到/download/路径下,一定要跟配置的/download/一致,在浏览器上访问的就是http://101.200.147.104:8080/download/,如下图所示:
在这里插入图片描述
4、配置nginx.conf,不使用状态码,也能重定向其他URL,但是要加具体RUL路径

server {
       listen       8080;
       server_name  localhost;
       charset      utf-8;
       location / {
          #return 302 /download/;
          return http://101.200.147.104:8080/download/;
       }

      location /download/ {
          root /home/nginx;
          autoindex on;
          autoindex_exact_size off;
          autoindex_format html;
          autoindex_localtime on;
       }
   }

rewrite指令

功能:rewrite指令能够根据匹配的正则表达式,重写URL。
语法:rewrite regex replacement [flag]
flag可选值及含义:

  • last:重写后的URL发起新请求,再次进入server段,重试location中的匹配
  • break:直接使用重写后的URL,不再匹配其他location中的语句
  • redirect:返回302临时重定向
  • permanent:返回301永久重定向

默认值:无
上下文:server、location、if

示例:

server {
      listen       8080;
      server_name  localhost;
      charset      utf-8;
      location /images {
          rewrite /images/(.*) /download/$1;
      }

     location /download/ {
         root /home/nginx;
      }
}

当浏览器上输入http://101.200.147.104:8080/images/的时候,会被重定向到/download/页面,其中/images/(.*) /download/$1中表示当访问images下的任意文件时,都重定向到/download/目录下,$1表示前项引用,即引用前面的正则,即(.*)。
如果后面跟上break,就不会走下面的/download/,而是直接返回images下的文件,而last则会继续走下面的/download/
在这里插入图片描述

return和rewrite指令的执行顺序

示例:

server {
      listen       8080;
      server_name  localhost;
      charset      utf-8;
      location /images {
          rewrite /images/(.*) /download/$1 last;
          return 200;
      }

     location /download/ {
         root /home/nginx;
         rewrite /download/(.*) /pics/$1;
         return 200;
     }
     location /pics/ {
       return 200;
    }
}

示例分析:

  • 第一个/images的rewrite指令中有last指令,所以会继续当前server中的location重写匹配,会直接跳到/download/中,而第一个return则不会执行;
  • /download/中,rewrite指令后面没有last执行,则会顺序执行到return 200;语句,而不会继续到/pics/下;
  • 如果在/download/的rewrite中加入break语句,则会显示pics中的内容,而不会显示 /pics/中的return 200。如:
location /download/ {
    root /home/nginx;
    rewrite /download/(.*) /pics/$1 break;
    return 200;
}
location /pics/ {
  return 200;
}

最后

以上就是高贵酸奶为你收集整理的Nginx(8)_return和rewrite的全部内容,希望文章能够帮你解决Nginx(8)_return和rewrite所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部