欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Nginx Rewrite规则

程序员文章站 2023-04-06 16:22:34
1.基础知识点 (1)Rewirte规则也称为 规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。 (2)对收缩引擎优化(SEO),利于收索引擎抓取网站页面。 (3)隐藏网站URL真实地址。 (4)网站变更升级,可以基于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)    匹配任何单字符;

Nginx Rewrite规则

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

Nginx Rewrite规则

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

Nginx Rewrite规则

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

 Nginx Rewrite规则

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

Nginx Rewrite规则

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

Nginx Rewrite规则

(7)^  字符串开始标志

(8)$ 字符串结束标志

(9)\n 转义换行标志

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地址