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相同。