介绍:
实现url的重写
使用ngx_http_rewrite_module模块处理和解析rewrite功能的相关配置
规则核心pcre
配置指令
if指令
语法结构:
if(condition){
...
}
支持以下几种语法:
- 变量名
if($var){
...
}
- “=”和”!=”
if($request_method=POST){
...
}
- 正则表达式
“~”:匹配过程中对大小写敏感
“~*”:匹配过程中对大小写不敏感
“!~”、”!~*”:匹配失败为true
if($http_user_agent ~ MSIE){
...
}
- 判断请求的文件是否存在”-f”和”!-f”
- 判断请求的目录是否存在使用”-d”和”!-d”
- 判断请求的目录或者文件是否存在使用”-e”和”!-e”
- 判断请求的文件是否可执行使用”-x”和”!-x”
break指令
用于中断当前作用域中的其他nginx配置,可以在server块、location块和if块中使用
return指令
用于完成对请求的处理,直接向客户端返回响应状态码
return [ text ]
return code URL;
return URL;
code
返回给客户端的HTTP状态码text
返回给客户端的响应体内容,支持变量的使用URL
返回给客户端的URL地址
rewrite指令
通过正则表达式的使用改变uri
语法结构
rewrite regex replacement [flag]
- regex
用于匹配uri的正则表达式
rewrite接收的uri不包含host地址 - replacement
匹配成功后用于替换URI中被截取内容的字符串。默认情况下,如果该字符串是有”http://”或者”https://”开头的,不会继续向下对URI进行其他处理,直接将重写后的URI返回给客户端 flag
- last
终止在继续在本location块中处理接收到的uri,并将此处重写的uri作为一个新的uri,使用各location块进行处理
demo:
location / { rewrite ^(/myweb/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/myweb/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; }
如果uri在第二行被匹配成功,不会使用第三行的配置重新匹配和处理新的uri,而是禳所有的lication块重新匹配和处理新的uri
break
将此处重写的uri作为一个新的uri,在本块中继续处理。该标志将重写后的地址在当前的location块中执行,不会将新的uri转向其他location块redirect
将重写后的uri返回给客户端,状态吗302,指明是临时重定向uri- permanent
将重写后的uri返回给客户端,状态吗301,指明是永久重定向uri
rewrite_log指令
配置是否开启url重写日志的输出功能
rewrite_log on|off
- last
set指令
set variable value
常用全局变量
变量 | 说明 |
---|---|
$args | 如http://www.baidu.com?arg1=value1中的”arg1=value1” |
$content_length | 存放请求头的Content-length字段 |
$content_type | 存放请求头的Content-type字段 |
$document_root | 针对当前请求的根路径 |
$document_uri | 如http://www.baidu.com/server/source?arg1=value1中的”/server/source” |
$host | 请求url的主机部分字段 |
$http_user_agent | 存放客户端的代理信息 |
$http_cookie | 客户端的cookie信息 |
$limit_rate | nginx服务器对网络连接速率的限制 |
$remote_addr | 客户端的地址 |
$remote_port | 客户端与服务器建立连接的端口号 |
$remote_user | 客户端的用户名 |
$request_body_file | 发给后端服务器的本地文件资源的名称 |
$request_method | 客户端的请求方式 |
$request_filename | 当前请求的资源文件的路径名 |
$request_uri | 当前请求的uri |
$query_string | 同$args |
$scheme | 请求使用的协议,如http、https、ftp等 |
$server_protocol | 客户端请求协议的版本 |
$server_addr | 服务器的地址 |
$server_name | 客户端请求到达的服务器的名称 |
$server_port | 客户端请求到达的服务器的端口号 |
$uri | 同$document_uri |