和location类似,也是要负责URL解析的。

rewrite  重写


nginx的配置非常多,nginx的第三方模块也非常非常多。不可能讲每一种模块的配置办法。通常碰到一个nginx的新问题你想怎么去解决?所有模块的信息都在官方文档上。刚才使过nginx的location模块。

看/usr/local/nginx/conf/nginx.conf下面有多个server,每一个server下面又有多个location。既然说上下文是server和location,就意味着你可以把重写的规则放在location里面,也可以放在server里面。所以说你以后碰到一个新模块要安装了说那个新的功能要在nginx中启用了,你不会不要紧,所有模块的说明都在官方网站上,你看它上下文在哪里写,应该在哪个上下文中写,应该是什么语法就ok了。


URL重写的基本语法:和apache差别不大,其实都是使正则表达式。主要还是正则表达式的应用。


现在chrome+火狐已经占了很多份额,占了大概是50%多的份额,IE占少数。再往十年前,IE绝对主流。再往20年前,netscape占主流。netscape就是Mozilla的内核。那个时候netscape占主流,好多服务器都认识它的头信息,就是那个agent信息,知道它的agent信息是Mozilla。后面微软想推出它的浏览器但是市面上都认识Mozilla这个头信息。所以它也只好加了这个头信息:Mozilla 5.0。后面微软一统天下,它一加这个Mozilla 5.0后来大家也就加这个头信息。当然它们自己内部的内核是什么你得看这儿。像刚才的chrome那就是Chrome/51.0.2704,像刚才的IE11最新的那就是Trident/7.0。你打开几乎所有的浏览器前面都加上Mozilla。就是因为9几年网景公司占绝对主力留下了一个历史痕迹。


先测试等号,IP比较适合用等号测试。怎么获取客户端的IP?既然日志有,肯定可以获取它。conf/nginx.conf的remote_addr记录的是远程地址(客户端的IP)。做判断不让自己的IP访问,把自己关在外面。


再测试一个正则表达式的用法。用正则表达式判断它是不是IE用户,你判断它的user-agent头信息里面有没有rv这几个字。对http协议user-agent还不太了解,可以看老师的自学it网公益PHP培训公益http协议那一章,对http协议做了详细的讲解。只要你是IE,我不让你访问任何的页面,



为什么报505错误?其实是已经成功了。

用chrome浏览器访问成功说明我们服务器跑的是正常的。

对喔,这是循环重定向。


如果不想循环重定向那就break。


当你访问的目录或者页面不存在的时候,我就来一个404给你。专门设置一个错误的404页面,这里专门不用系统自带的404功能:error_page。用rewrite来实现。

当前请求的脚本,当前请求的是哪一个文件

哪一个变量体现了请求的这个文件呢?在conf/nginx.conf中没有,在conf/fastcgi.conf中有。


nginx有权引用的所有变量都存放在conf/fastcgi.conf。想起了PHP下的$server变量,其实那些变量都是apache或者是nginx传给它的。nginx首先初始化这些变量。

判断,如果不存在想要请求的文件,就重写到html/404.html。

咱们的PHP还没有装,也读不出这些参数变量准确的值是多少,因此无法判断路径对不对,文件存不存在写,导致调试的时候盲人摸虾。


换一种判断方式。

说明也重写过来了。

查看错误日志,循环重定向到/404.html错误。



再次修改:

再次修改:


心里面还是不舒服,已经重写到404.html上去了,为什么还让我break。404.html是存在的。和全路径无关,404.html无需写全路径。

rewrite重新去读404.html的内容,它的上下文没变。


至此把if的各个条件给测试了,return也测试了,break也测试了,还有一个简单的rewrite。接下来看set。set是设置变量用的。

判断是ie浏览器发起访问请求的,就重写到ie.html上去,但是你不得不加上一个break。加上break是为了防止循环重定向。现在就使用set的功能。这样写的意义不大,用一个break多省事,仅仅是为了让大家练习if和set变量。



装一个ecshop来做rewrite实战。


首先看看本地机有没有装mysql


装PHP 装mysql练习URL重写。

09-nginx Rewrite语法详解的更多相关文章

  1. Nginx Rewrite语法详解

    重写中用到的指令 if  (条件) {}  设定条件,再进行重写 set #设置变量 return #返回状态码  return 403; break #跳出rewrite rewrite #重写 I ...

  2. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  3. 【nginx运维基础(6)】Nginx的Rewrite语法详解

    概述 重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力:而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接:它还可以提高你的网 ...

  4. Nginx Rewrite规则详解

    Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等. Rewrite规则的最后一项参数为flag标记,支持的flag标记主要有以下几种 ...

  5. Nginx 常用全局变量 及Rewrite规则详解

    每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...

  6. Nginx配置配置文件详解

    文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...

  7. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  8. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  9. Nginx配置文件中文详解

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

随机推荐

  1. 旧书重温:0day2【6】bind_shell

    学习了以上5节课,我们学到了很多知识,例如如何动态获取指定函数的地址:我们也学到了很多经验,例如如何发现代码中的错误,如何用od定位到错误,并修正. 有了以上积累,今天我们继续实验bind_shell ...

  2. Apache的Mod_rewrite学习 (RewriteCond重写规则的条件) 转

    RewriteCondSyntax: RewriteCond TestString CondPattern [flags] RewriteCond指令定义一条规则条件.在一条RewriteRule指令 ...

  3. 转载(原标题:网站再遭新威胁 Struts2又曝高危漏洞啦)

    自从著名J2EE框架Apache Struts2被曝出可被远程攻击者利用的执行漏洞后,关于Struts2的安全性便广受关注.近日,安全研究人员则再次发现了Struts2存在远程代码执行的漏洞,Stru ...

  4. 剑指offer-第四章解决面试题的思路(顺序打印矩阵)

    题目:输入一个矩阵,按照从外向里的顺序依次打印出每一个数.(画图让抽象的问题形象化) 思路:打印矩阵时,把每一层当做一个圈来打印,找到打印整个矩阵的截止条件. 从上图中我可以看到一个6*6的矩阵(长宽 ...

  5. js对象原型链

    JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象.这个对象的所有属性和方法,都会被构造函数的所拥有. 这也就意味着,我们可以把所有对象实例需要共享的属性和方 ...

  6. 在vue项目中正确的引入jquery和bootstrap

    <script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...

  7. 关于djangoadmin的一个博客

    http://www.cnblogs.com/linxiyue/category/569717.html

  8. gatsbyjs 使用

    1. 安装 npm install --global gatsby-cli 2. 使用 // 创建项目 gatsby new dalong cd dalong // 启动 gatsby develop ...

  9. 一个苹果证书如何多次使用——导出p12文件[多台电脑使用]

    为什么要导出.p12文件 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了(一般在我们的证书界面中 ...

  10. sqlserver sql语句查看分区记录数、查看记录所在分区

    select count(1) ,$PARTITION.WorkDatePFN(workdate) from imgfile group by $PARTITION.WorkDatePFN(workd ...