语法
rewrite regex replacement flag
flag有如下:
- last
- break 中止 rewrite, 不再继续匹配
- redirect 返回临时重定向的 HTTP 状态302
- permanet 返回永久重定向的 HTTP 状态301
last 和 break 的不同:
break 是终止当前location 的 rewrite 检测, 且不再进行 location 匹配;
last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则
下面是可以用来判断的表达式:
-f
和!-f
判断是否存在文件
-d
和!-d
判断是否存在目录
-e
和!-e
判断是否存在文件或目录
-x
和!-x
判断文件是否可执行下面是可以用作判断的全局变量
- $args 等于请求行中的参数
- $content_length 请求头中的
Content-length
字段 - $content_type 请求头中的
Content-Type
字段 - $document_root 当前请求在
root
指令中指定的值 - $host 请求主机头字段, 否则为服务器名称
- $http_user_agent 客户端
agent
信息 - $http_cookie 客户端
cookie
信息 - $limit_rate 这个变量可以限制连接速率
- $request_body_file 客户端请求主题信息的临时文件名
- $request_method #客户端请求的动作,通常为GET或POST。
- $remote_addr #客户端的IP地址。
- $remote_port #客户端的端口。
- $remote_user #已经经过Auth Basic Module验证的用户名。
- $request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string
#与$args相同。- $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
相同
例:
http://localhost:88/test1/test2/test.php
$host: localhost
$server_post: 88
$request_uri: http://localhost:88/test1/test2/test.php
$document_uri: /test1/test2/test.php
$document_root: /usr/share/nginx/html (在nginx.conf里配置的)
$request_filename: /usr/share/nginx/html/test1/test2/test.php (在nginx.conf里配置的)
详例:
多目录转成参数
abc.domain.com/sort/2
=> abc.domain.com/index.php?act=sort&name=abc&id=2
if ($host ~* (.*)\.domain\.com) {
set $sub_name $1;
rewrite ^