Nginx 之 Rewrite 规则

Posted crazymagic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 之 Rewrite 规则相关的知识,希望对你有一定的参考价值。

write 规则介绍

Rewite 规则作用

  • Rewrite规则可以实现对url的重写,以及重定向

 作用场景:

  • URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
  • SEO优化
  • 维护:后台维护、流量转发等
  • 安全

注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

配置语法:

  • Syntax: rewrite regex replacement [flag];
  • Default:——
  • Context:server、location、if

简单实例

rewrite ^(.*)$ /pages/maintain.html break;

解释说明:

  • 会把所有的请求都重定向到 /pages/maintain.html 页面 

常用的正则表达式

技术图片

在linux下,可以用pcretest来测试

技术图片

小示例

rewrite index\\.php$ /pages/maintain.html break;
        if ($http_user_agent ~ MSIE) 
            rewrite ^(.*)$ /msie/$1 break;
        

解释说明

  • \\     --转义字符
  • ( ) --用于匹配括号之间的内容,通过$1、$2调用

 (.*) 会把所有参数的内容提取,传到/msie/下

rewrite配置语法中的flag参数

last 停止rewrite检测【如果没有匹配到,会继续向下匹配】

break 停止rewrite检测【如果没有匹配到,则不再向下匹配,直接返回结果404】

redirect 返回302临时重定向,地址栏会显示跳转后的地址

permanent 返回301永久重定向,地址栏会显示跳转后的地址

last与break的区别案例

 test_rewrite1.conf

server 
    listen 80 default_server;
    server_name www.zhangbiao.com;

    access_log  /var/log/nginx/log/host.access.log  main;

    root /opt/app/code;
    location ~ ^/break 
        rewrite ^/break /test/ break;
    

    location ~ ^/last 
         rewrite ^/last /test/ last;
    

    location /test/ 
       default_type application/json;
       return 200 ‘"status":"success"‘;
    

 

可以在终端使用 curl -vL 可以看到请求的全过程

curl -vL www.zhangbiao.com/last/

  

 访问

http://www.zhangbiao.com/test/

技术图片

 

访问

http://www.zhangbiao.com/last/

 技术图片

 

 访问

http://www.zhangbiao.com/break/

技术图片

 

可以发现访问 last 的时候新建立了一个请求 /test/ ,而访问/break/ 请求的时候 会去 /opt/app/code 下找相应的资源,没找到所以报错

 

 

Rewrite规则_redirect和permanent区别

 test_rewrite1.conf

server 
    listen 80 default_server;
    server_name www.zhangbiao.com;

    access_log  /var/log/nginx/log/host.access.log  main;

    root /opt/app/code;
    location ~ ^/imooc 
         rewrite ^/imooc http://www.imooc.com/ permanent;
         #rewrite ^/imooc http://www.imooc.com/ redirect;
    


 

redirect 表示临时的重定向 ,只要后端服务是开者的。每次访问 /imoc 都会重定向到  http://www.imooc.com

permanent 表示永久重定向,第一次访问成功后,把后端服务关闭后,访问/imoc 仍然会重定向到  http://www.imooc.com

 

 rewrite 规则使用场景案例

test_rewrite.conf

server 
    listen       80;
    server_name  www.zhangbiao.com;
    root   /opt/app/code;

    location / 
        rewrite ^/course-(\\d+)-(\\d+)-(\\d+)\\.html$ /course/$1/$2/course_$3.html break;
        if ($http_user_agent ~* Chrome) 
            rewrite ^/nginx http://coding.imooc.com/class/121.html redirect;
        

        if (!-f $request_filename) 
            rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
        
        index  index.html index.htm;
    

    error_page   500 502 503 504 404  /50x.html;

  

 访问在 /opt/app/code/course/11/22 下存在的资源文件

http://www.zhangbiao.com/course-11-22-33.html

技术图片

 

 访问在 /opt/app/code/course/11/22 下不存在的资源文件  

http://www.zhangbiao.com/course-11-22-5

技术图片

 

rewrite优先级规则

  • 执行server 块的rewrite 指令。将所有的网站都重定向同一个网站。
  • 执行location匹配。
  • 执行选定的location中的rewrite。

  

 

以上是关于Nginx 之 Rewrite 规则的主要内容,如果未能解决你的问题,请参考以下文章

nginx rewrite 规则

nginx rewrite flag

Nginx Rewrite规则详解

nginx rewrite规则

Nginx配置的rewrite编写时last与break的区别详解

Nginx Rewrite(伪静态)