关于nginx的rewrite规则
rewrite的主要功能是实现URL地址的重定向,比如访问nowamaic.net,自动跳转到www.nowamaic.net, 或者是反过来。它依赖于pcre组件。语法格式为:
1 | rewrite <regex> <replacement> [flag]; |
根据regex正则表达式,会重定向到replacement,flag标识表示规则的执行属性。
1、flag标记有:
- last:相当于apache里面的(L),表示完成匹配。
- break:本条规则匹配完成后,终止匹配,不在匹配后面的规则。
- redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。
- permanent:返回301永久重定向,浏览器地址会显示跳转后的URL地址。
其中last和break用来实现URL重写时,浏览器地址不会改变。
2、rewrite常用于匹配HTTP请求头信息,浏览器主机名、URL等,具体内容如下:
-
HTTP headers:HTTP_USER_AGENT,HTTP_REFERER,HTTP_COOKIE,HTTP_HOST,HTTP_ACCEPT
-
connection & request:REMOTE_ADDR,QUERY_STRING。
-
server internals:DOCUMENT_ROOT,SERVER_PORT,SERVER_PROTOCOL。
-
system stuff:TIME_YEAR,TIME_MON,TIME_DAY。
解释:
HTTP_USER_AGENT:用户使用的代理,例如浏览器。
HTTP_REFERER:告知服务器,从哪个页面来访问的。
HTTP_COOKIE:客户端缓存,主要用于存储用户名和密码等信息。
HTTP_HOST:匹配服务器servername的域名。
HTTP_ACCEPT:客户端的浏览器支持的MIME类型。
REMOTE_ADDR:客户端的IP地址。
QUERY_STRING:URL访问的字符串。
DOCUMENT_ROOT:服务器的发布目录。
SERVER_PORT:服务器端口。
SERVER_PROTOCOL:服务器的协议。
TIME_YEAR:年。
TIME_MON:月。
TIME_DAY:日。
3、regex的相关说明
- \:转义符标志。
- ^:匹配输入字符串的起始位置。
- $:匹配输入字符串的结束位置。
- *:匹配前面的字符零次或者多次。
- +:匹配前面的字符1次到多次。
- ?:匹配前面的字符零次或一次。
- (pattern):匹配括号内并可以在后面获取对应的匹配,常用$0…$9属性获取小括号中的匹配内容。
例子:
1 | if( $host != 'www.dyh.com' ){ |
访问/dyh/test1/ 跳转到/newindex.html,浏览器的位置不变
1 | rewrite ^/dyh/test1/$ /newindex.html last; |
访问文件和目录不存在时跳转到index.html
1 | if ( ! -e $request_name ){ |
目录对换,如/xxxx/1234变为/xxxx?id=1234
1 | rewrite ^/(.+)/(\d+) /$1?id=$2 |
判断浏览的使用的代理
1 | if ( $http_user_agent ~ MSIE ){ |