nginx系列3-rewrite、return、if指令

1. rewrite指令语法

rewrite语法:rewrite regex URL [flag]。作用域:server,location,if。
flag标识分为四类:

  • last: 相当于Apache的[L]标记,表示完成本次rewrite。对当前重写的新URI在rewrite指令集上重新查找。
  • break: 停止执行当前虚拟主机的后续rewrite指令集,但当前location内剩余非rewrite语句和location外的非rewrite语句可以执行
  • redirect: 返回302临时重定向,地址栏会显示跳转后的地址
  • permanent: 返回301永久重定向,地址栏会显示跳转后的地址
    当没有flag值的时候,rewrite还会往下走,最后一个rewrite覆盖前面的。再引发location重匹配

rewrite指令执行顺序:

  • 执行server块的rewrite指令(server关键字后{}包围的区域)
  • 执行location匹配
  • 执行选定的location中的rewrite指令
    如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件。如果循环超过10次,则返回500 Internal Server Error错误。

2. return指令语法

return指令语法:return code;return code URL;return URL。表示停止处理并返回指定状态码(code)给客户端。
作用域:server,location,if。

3. if指令语法

if指令语法:if(condition){…}。表示对条件condition进行判断。如果为真,大括号内的指令将被执行。
作用域:server,location。
这里条件中有些全局常量和判断条件:
判断条件:

  • -d, !-d 检查一个目录是否存在
  • -f ,!-f 检查一个文件是否存在
  • -e ,!-e 检查一个文件、目录、符号链接是否存在
  • -x , !-x 检查一个文件是否可执行

全局常量:

$args: #这个变量等于请求行中的参数,同$query_string
$content_length: 请求头中的Content-length字段。
$content_type: 请求头中的Content-Type字段。
$document_root: 当前请求在root指令中指定的值。
$host: 请求主机头字段,否则为服务器名称。
$http_user_agent: 客户端agent信息
$http_cookie: 客户端cookie信息
$limit_rate: 这个变量可以限制连接速率。
$request_method: 客户端请求的动作,通常为GET或POST。
$remote_addr: 客户端的IP地址。
$remote_port: 客户端的端口。
$remote_user: 已经经过Auth Basic Module验证的用户名。
$request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme: HTTP协议(如http,https)。
$server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name: 服务器名称。
$server_port: 请求到达服务器的端口号。
$request_uri: 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri: 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri: 与$uri相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值