1 简介

  rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块。rewrite模块会根据PCRE正则匹配重写URI,然后发起内部跳转再匹配location,或者直接做30x重定向返回客户端。rewrite其实就是做了uri的映射

 

2 rewrite语法格式及参数语法

  rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容, 重定向到replacement,结尾是flag标记。

  rewrite    <regex>    <replacement>    [flag];

    关键字      正则        替代内容          flag标记

    关键字:其中关键字error_log不能改变

    正则:perl兼容正则表达式语句进行规则匹配

    替代内容:将正则匹配的内容替换成replacement

    flag标记:rewrite支持的flag标记

flag标记说明:

last  #本条规则匹配完成后,继续向下匹配新的location URI规则

break  #本条规则匹配完成即终止,不再匹配后面的任何规则

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

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

 

3 rewrite参数的标签段位置

  可以在下面这些地方使用

server,location,if

 

4 写法

rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break;  #地址重写

  rewrite为固定关键字,表示开始进行rewrite匹配规则 

  ^/[0-9]+$是正则表达式,匹配路径

  替代部分是/index.html?testParam=$1,$1是对应前面第一个匹配参数,也就是取自^/[0-9]+。匹配成功后跳转到的URL。

  flag部分break表示本条规则匹配完成即终止,不再匹配后面的任何规则

  此时如访问:192.168.28.110/123  实际会访问http://www.atguigu.com/teacher.shtml?testParam=123

 

 

5 示例

5.1 配置

  现有一个nginx:192.168.28.110:80

  nginx配置如下:

rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break;  #地址重写
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;


    server {
        listen       80;
        server_name  nginx1.com;

        location / {
            proxy_pass   http://www.atguigu.com/; #方向代理
            rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break;  #地址重写
            #root   /usr/local/mynginx/nginx1;
            #index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
 

5.2 访问

1)直接访问

http://www.atguigu.com/teacher.shtml

 

2)访问nginx

http://192.168.28.110/123

  在访问上面地址时,

  取192.168.28.110后面的uri去和rewrite的表达式匹配

  ^/[0-9]+$表示任意数量的数字,123匹配上了
  那么就会使用/teacher.shtml?testParam=$1替代123
  $1就是取第一个匹配的值,也就是123,也就是/teacher.shtml?testParam=123
  完整的就是http://192.168.28.110/teacher.shtml?testParam=123
  由于配置了方向代理,所以实际访问的就是http://www.atguigu.com/teacher.shtml?testParam=123

 

 

  

原文地址:http://www.cnblogs.com/jthr/p/16834913.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性