Nginx的rewrite功能和apache一样,主要是实现URL地址的重定向。Nginx的rewrite功能是由PCRE软件支持,rewrite模块即 ngx_http_rewrite_module 模块。rewrite机制从某种意义上可以说为了美观或者搜索引起的友好搜索,提高排名等

1、rewrite语法规则

rewrite	regex replacement [flag]

rewrite:rewrite重写的关键字不可省略
regex:这里写的是正则表达式
replacement:这里是替换内容
flag:这里是flag标记

flag标记说明:

flag标记

说明

last

也就是apache里的(L)标记,表示完成rewrite,URL地址不会改变

break

本条规则匹配成功后,会停止匹配,不再匹配后面的规则,URL地址不会改变

redirect

返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent

返回301永久重定向,浏览器地址栏显示跳转后的URL地址,Nginx返回response状态码301

相关符号说明:

符号

说明

*

代表前面0或者多个字符

+

代表前面1或者多个字符

?

代表前面0或1个字符

^

代表字符串的开始位置

$

代表字符串结束位置

$n

代表字符串结束第n个参数

.

通配符,代表任何字符

文件目录匹配

参数

介绍

-f

判断文件是否存在 返回值true为存在

!-f

判断文件是否存在 返回值false为不存在

-d

判断目录是否存在 返回值true为存在

!-d

判断目录是否存在 返回值true为不存在

-e

判断文件或目录是否存在 返回值true为存在

!-e

判断文件或目录是否存在 返回值true为不存在

-x

判断文件是否可执行 返回值true为可执行

!-x

判断文件是否可执行 返回值true为不可执行

2、rewrite实例:

  • 实例1  多域名跳转到同一域名
server{
    listen 80;
    server_name www.oyhdo.com oyhdo.com ;
    if($host != 'www.oyhdo.com' ){
        rewrite ^/(.*)$ http://www.oyhdo.com/$1 permanent;
    }
}
  • 实例2  当文件不存在时重定向到指定文件

1、访问test目录下的文件或目录不存在时,则跳转到test2下面的此文件或者目录,跳转后会将URL进行转换:

server{
    listen 80;
    server_name www.oyhdo.com;
    if(!-e $request_filename){
        rewrite  ^/test/(.*)$ http://www.oyhdo.com/test2/$1 permanent;
    }
}

2、访问test目录下的文件或目录不存在时,则重定向到index.html文件,跳转后URl不会进行转换:

server{
    listen 80;
    server_name www.gofor.com;
    if(!-e $request_filename){
        rewrite ^/test/(.*)$ index.html last;
    }
}

3、目录切换,表示将原目录转换成其他目录,【0-9a-z】表示转换后目录名称

server{
    listen 80;
    server_name www.oyhdo.com;
    if(!-e $request_filename){
        rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.oyhdo.com/test/$1$2$3 permanent;
    }
}
  • 实例3  匹配用户浏览器代理信息

如下,当匹配到浏览代理为Android和iPhone时进行重定向 test目录下的文件,改变访问的地址

server{
    listen 80;
    server_name www.oyhdo.com;
    if ( $http_user_agent ~* ("Android")|(iPhone)){
        rewrite ^/test/(.*)$ http://www.oyhdo.com/test/$1  permanent;
    }
}