nginx rewirte 和 location

本文详细介绍了rewrite和location的概念及应用,包括rewrite的工作原理、执行顺序、相关指令及其用法,以及location的不同匹配方式。此外,还对比了rewrite与location的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是rewrite ?

rewrite 顾名思义就是重写的意思,主要是针对URL进行重写,采用方法是使用PCRE(Perl Compatible Regular Expressions) perl兼容正则表达式语法进行规则匹配。
其意义所在: 可以规范URL 根据变量来做URL转向和选择配置。

执行顺序

1.执行server块的rewrite指令,server {} 内部的rewrite;
2.执行location匹配(后面有介绍location);
3.执行选定的location中的rewrite指令(rewrite 可以写在location内);
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件
如果循环超过10次,则返回500 Internal Server Error错误

相关指令

return

  • 语法
    return code;
  • 作用
    结束规则集的执行 并返回状态码给客户端,主要用于当url 中含有禁止访问的资源时给返回一些错误码;
  • 例子
    服务器禁止客户端访问 .svn CVS Entries 等目录文件,可用下列表示
  location ~* /(\.svn|CVS|Entries){
   return 403;  
 }  

if

  • 作用
    用来判断条件是否满足,如果满足则执行大括号里面的内容,注意:if 不支持嵌套,不支持多个条件&& 和 || 处理。
  • 语法
    if (condition) {...}
  • condition 主要包含一下内容
    1. 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
    2. 直接比较:使用 == 或者 != 比较变量
    3. 正则匹配: ~ 表示区分大小匹配,~* 表示不区分大小匹配, !~ !~* 与 ~ ~* 相反表示不匹配
    4. -f 与 !-f 判断文件存在不存在
    5. -d 与 !-d 判断目录存在不存在
    6. -e 与 !-e 判断文件或者目录存在不存在
    7. -x 与 !-x 判断文件是否有可执行
  • 例子
if ($host !~ "^((.*\.)?(test\.(com|com\.cn|cn)) {
  return 403;
 }  

set

  • 语法
set $variable value
  • 作用
    定义一个变量并给变量赋值;
  • 例子
set $appname 'hello'

break

  • 作用
    完成当前的规则集,不再处理rewrite指令;
  • 语法
    break

  • 例子

 if ($slow) {
    limit_rate 10k;
    break;
}

rewrite

  • 作用
    重写URL
  • 语法
    rewrite pattern replacement [flag]

  • flag
    rewrite 语法最后一个参数为flag, 主要有一下几个:

    1. last : 相当于Apache的[L]标记,表示完成rewrite
    2. break: 本条规则完成后,终止匹配,不再匹配后面的规则;
    3. redirect: 返回302临时重定向,地址栏会显示重定向后的地址;
    4. permanent: 返回301永久重定向,地址栏会显示重定向后的地址;
      last与 beak 区别:
      这里写图片描述
  • 例子

 rewrite "^(.*)$" http://test.com$1 permanent;

什么是location

location 与 rewrite 功能很类似,目的都是为了实现跳转,不过location 主要针对某一个路径/具体URL做控制访问/方向代理,proxy_pass 可以实现转发至其他机器,rewrite 主要针对路径做同一域名的路径做替换,并且rewirte 可以写在location 内;

location 匹配

  • = : 表示精确匹配
  • ^~ : 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
  • ~:表示区分大小的正则匹配
  • ~* :表示不区分大小的正则匹配
  • /:通配符,如果没有匹配到其他选项,则使用该选项;
    匹配顺序 :
    精确匹配(=) > 完整路径匹配 > ^~ > 正则匹配(~/~*) > 部分路径匹配 > 通用匹配(/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值