nginx rewrite配置规则详细说明(七)

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语法


server {
rewrite {规则} {定向路径} {重写类型} ;

}


1、规则:可以是字符串或者正则来表示想匹配的目标url

2、定向路径:表示匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组

3、重写类型:



last 相当于Apache里德(L)标记,表示完成rewrite,浏览器地址栏URL地址不变。停止rewrite检测【如果没有匹配到,会继续向下匹配】

break本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变。停止rewrite检测【如果没有匹配到,则不再向下匹配,直接返回结果404】

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

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



简单实例


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

解释说明:


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


last和break的区别:


  1. 因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了(return 只能返回除301、302之外的code)。
  2. last一般写在server和if中,而break一般使用在location中

    3.last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
    4.break和last都能组织继续执行后面的rewrite指令
  3. 在location里一旦返回break则直接生效并停止后续的匹配location
    <pre><code>server {
    location / {
        rewrite /last/ /q.html last;
        rewrite /break/ /q.html break;
    }
    location &#61; /q.html {
        return 400;
    }

    }


访问/last/时重写到/q.html,然后使用新的uri再匹配,正好匹配到locatoin = /q.html然后返回了400;
访问/break时重写到/q.html,由于返回了break,则直接停止了;


常用的正则表达式


nginx rewrite配置规则详细说明(七)


案例说明


简单举例说明


server {
rewrite /last.html /index.html last;
# 访问 /last.html 的时候&#xff0c;页面内容重写到 /index.html 中

rewrite /break.html /index.html break;
# 访问 /break.html 的时候&#xff0c;页面内容重写到 /index.html 中&#xff0c;并停止后续的匹配

rewrite /redirect.html /index.html redirect;
# 访问 /redirect.html 的时候&#xff0c;页面直接302定向到 /index.html中

rewrite /permanent.html /index.html permanent;
# 访问 /permanent.html 的时候&#xff0c;页面直接301定向到 /index.html中

rewrite ^/html/(.&#43;?).html$ /post/$1.html permanent;
# 把 /html/*.html &#61;&gt; /post/*.html &#xff0c;301定向

rewrite ^/search\/([^\/]&#43;?)(\/|$) /search.html?keyword&#61;$1 permanent;
# 把 /search/key &#61;&gt; /search.html?keyword&#61;key

}


last与break的区别案例


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 &#39;{&#34;status&#34;:&#34;success&#34;}&#39;;
}

}


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


nginx rewrite配置规则详细说明(七)


访问:[http://www.zhangbiao.com/last/]https://www.aliyun.com/minisite/goods?userCode=xjz7ghod


nginx rewrite配置规则详细说明(七)


访问:[http://www.zhangbiao.com/break/]https://www.aliyun.com/minisite/goods?userCode=xjz7ghod


nginx rewrite配置规则详细说明(七)


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


Rewrite规则_redirect和permanent区别


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 规则实战案例


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

location / {
    rewrite ^/course-(\d&#43;)-(\d&#43;)-(\d&#43;)\.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;

}


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

访问在 /opt/app/code/course/11/22 下存在的资源文件
nginx rewrite配置规则详细说明(七)


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

访问在 /opt/app/code/course/11/22 下不存在的资源文件 
nginx rewrite配置规则详细说明(七)


rewrite优先级规则


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

云服务器ECS地址:阿里云·云小站

上一篇:windows 2003 安装mssql2000 报序列号错误


下一篇:基于EMR离线数据分析