` nginx(七) | 听云轩

nginx(七)

关于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属性获取小括号中的匹配内容。

例子:

将dyh.com跳转到www.dyh.com

1
2
3
if( $host != 'www.dyh.com' ){
rewrite ^/(.*)$ http://www.dyh.com/$1 permanent;
}

访问/dyh/test1/ 跳转到/newindex.html,浏览器的位置不变

1
rewrite ^/dyh/test1/$ /newindex.html last;

访问文件和目录不存在时跳转到index.html

1
2
3
if ( ! -e $request_name ){
rewrite ^/(.*)$ /index.html last;
}

目录对换,如/xxxx/1234变为/xxxx?id=1234

1
rewrite ^/(.+)/(\d+) /$1?id=$2

判断浏览的使用的代理

1
2
3
if ( $http_user_agent ~ MSIE ){
rewrite ^(.*)$ /it/$1 break;
}
------ 本文结束 ------
您的支持将鼓励我继续创作