Nginx Rewrite规则

1.基础知识点

(1)Rewirte规则也称为 规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。

(2)对收缩引擎优化(SEO),利于收索引擎抓取网站页面。

(3)隐藏网站URL真实地址。

(4)网站变更升级,可以基于Rewrite临时重定向到其他页面。

(5)有利于服务器实现伪静态。

2.Rewrite结尾表示符

(1)last:相当于apache里的(L)标记,表示完成rewrite匹配。(浏览器地址栏URL地址不变)

(2)break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。(浏览器地址栏URL地址不变)

(3)redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。

(4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

3.Rewrite规则常用表达式

(1)    匹配任何单字符;

(2)? 匹配0到1个字符;只匹配一次;

(3)*   匹配0到多个字符;

(4)+  匹配1到多个字符;

 

(5)[0-9]  匹配字符串0-9

(6)[^0-9] 不匹配字符串0-9

(7)^  字符串开始标志

(8)$ 字符串结束标志

(9) 转义换行标志

4.Nginx Rewrite变量常用于匹配HTTP请求头信息、浏览器主机名、URL等。

5.Rewrite配置在nginx的location块中;

(1)将dks.net跳转至www.dks.net

if($host='dks.net')    {
    rewrite ^/(.*)$    http://www.dks.net/$1     permanent;
    }
  # $host内置nginx变量,匹配用户访问的域名
  # $1表示引用第一个括号的内容,是用户输入的内容;如果不使用$1引用,则只会匹配根

(2)将访问www.dks.net跳转至www.test.com/new.index.html

rewrite    ^/$    http://www.test.com/new.index.html     permanent;

(3)访问 /dks/test01/跳转至/newindex.html,浏览器地址不变

rewrite    ^/dks/test01/$    /newindex.html    last;

(4)多域名跳转 www.dks.net

if($host!='www.dks.net')    {
    rewrite    ^/(.*)$    http://www.dks.net/$1    permanert;
    }

(5)访问文件和目录不存在跳转至index.php

  !-f 和 -f 判断文件

  !-d 和 -d 判断目录

  !-e 和 -e 判断文件和目录

  !-x 和 -x 判断文件是否可执行

if(!-e    $request filename)    {
    rewrite    ^/(.*)    /index.php    last;
    }

(6)目录对换 /xxx/123456——> /xxx?id=123456

  d+ 代表匹配数字,相当于[0-9]

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

(7)判断浏览器User Agent跳转

if($http_user_agent    ~MSIE)    {
    rewrite ^(.*)$/ie/$1  break;
    }

(8)禁止访问以.sh | .flv  |  .mps为文件后缀的文件

location ~.*.(sh|flv|mp3)$    {
    return 403;
    }

(9)将移动用户访问跳动至移动端。

if($http_user_agent ~*  "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)")    {
    rewrite ^/$    http://m.dks.net/    permanent;
    }

(10)匹配URL访问字符串跳转

if($args ~* tid=13)    {
    return 404;
    }

(11)访问/10690/dks/123  跳转至/index.php?tid/10690/items=123

rewrite    ^/([0-9]+)/dks/(.+)$    /index.php?tid/$1/items=$2    last;

 6.多rewrite规则跳转

rewrite ^/dks/(.*)/$ /newindex.html permanent;  #可以跳转
rewrite ^/newindex.html$ /dks/test01/index.html permanent;
rewrite ^/dks/(.*)/$ /newindex.html break;    #break 终止跳转,执行下一条rewrite规则
rewrite ^/newindex.html$ /dks/test01/index.html permanent;
rewrite ^/dks/(.*)/$ /newindex.html last;    #last  跳转,但下面那条rewrite规则匹配不上,因为last使地址栏url地址不变,所以下面的那条rewrite规则匹配不上;
rewrite ^/newindex.html$ /dks/test01/index.html permanent;    #此条规则匹配不上上边的url地址
原文地址:https://www.cnblogs.com/IMSCZ/p/10884318.html