Nginx rewrite 规则详解

Nginx rewrite 规则详解Nginx rewrite 规则详解 rewire 规则也称为规则重写 主要功能是实现浏览器访问 Http Uri 的跳转 其正则表达式是基于 Perl 语言 通常而言 几乎所有的 Web 服务器均可以支持 URL 重写 rewrite URL 规则重写的用途如下 对搜索引擎优化 search engine optimization SEO 友好 利于搜索引擎抓取网站页面 隐藏网站 URL 真实地址

大家好,我是讯享网,很高兴认识大家。

Nginx rewrite规则详解

rewire规则也称为规则重写,主要功能是实现浏览器访问 Http Uri的跳转,其正则表达式是基于Perl语言。通常而言,几乎所有的Web服务器均可以支持URL重写。

rewrite URL规则重写的用途如下

  • 对搜索引擎优化( search engine optimization,SEO)友好,利于搜索引擎抓取网站页面
  • 隐藏网站URL真实地址,浏览器显示更加美观;
  • 网站变更升级,可以基于 rewrite临时重定向到其他页面。

Nginx rewrite规则使用中有3个概念,分别是 rewrite结尾标识符、 rewrite规则常用表达式、 Nginx rewrite变量,3个概念的详解如下:
(1) Nginx rewrite结尾标识符,用于 rewrite规则末尾,表示规则的执行属性,详解如下:

  • last:相当于 Apache里的(L)标记,表示完成 rewrite匹配
  • break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。
  • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。
  • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

其中last和 break用来实现URL重写时,浏览器地址栏URL地址不变

(2) Nginx rewrite规则常用表达式,主要用于匹配参数、字符串及过滤设置,详解如下

  • .:匹配任何单字符
  • [ word ] : 匹配字符串word。
  • [ ^word ] :不匹配字符串。
  • test1 l test2 :可选择的字符串。
  • ?:匹配0~1个字符。
  • *:匹配0到多个字符。
  • +:匹配1到多个字符
  • ^:字符串开始标志
  • $:字符串结束标志
  • \n:转义符标志。

(3)Nginx rewrite 变量,常用于匹配HTTP请求头信息、浏览器主机名、URL等,具体内容如下

  • Http headers : HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE,HTPP_HOST, HTTP_ACCEPT。
  • connection & request: REMOTE_ADDR, QUERY_STRING。
  • server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOLO。
  • system stuff: TIME_YEAR, TIME_MON, TIME_DAY

详解如下:

  • HTTP_USER_AGENT:用户使用的代理,例如浏览器。
  • HTTP_REFERER:告知服务器,从哪个页面来访问的。
  • HTTP_COOKIE:客户端缓存,主要用于存储用户名和密码等信息。
  • HTPP_HOST:匹配服务器 servername域名。
  • HTTP_ACCEPT:客户端的浏览器支持的MIME类型。
  • REMOTE_ADDR:客户端的IP地址。
  • QUERY_STRING:URL中访问的字符串。
  • DOCUMENT_ROOT:服务器发布目录。
  • SERVER_PORT:服务器端口。
  • SERVER_PROTOCOLO:服务器端协议。
  • TIME_YEAR:年
  • TIME_MON:月。
  • TIME_DAY:日。
  • 将test.net跳转至www.test.net,代码如下:

    if ( $host = ‘test.net’ ) {
    rewrite ^/(.*) $http://www.test.net/$1 permanent;
    }

  • 访问www.test.net跳转www.gest.com/new.index.html,代码如下:

    rewrite ^ /$http://www.gest.com/index01.html permanent;

  • 访问/test/test01/ 跳转到 /newindex.html,浏览器地址不变,代码如下:


    讯享网

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

  • 多域名跳转到www.test.net,代码如下:

    if ( $host != ‘www.test.net’ ) {
    rewrite ^/(.*) $http://www.test.net/$1 permanent;
    }

  • 访问文件和目录不存在跳转至 index.php,代码如下:

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

  • 判断浏览器user agent跳转,代码如下
  • 禁止访问以.sh,flv,mp3为文件后缀名的文件,代码如下

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

  • 将移动用户访问跳转至移动端,代码如下

    if ( $http_user_agent ~* “(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)”)
    }
    rewrite ^/ $http:/m.test.net/ permanent;
    }

  • 匹配URL访问字符串跳转,代码如下:

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

  • 访问/10690/test/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任何多个字符,代码如下:

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

小讯
上一篇 2025-02-09 22:36
下一篇 2025-03-14 09:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44303.html