和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. Mongodb 的劣势

    MongoDB中的数据存放具有相当的随意性,不具有MySQL在开始就定义好了.对运维人员来说,他们可能不清楚数据库内部数据的数据格式,这也会数据库的运维带来了麻烦. 1. 事务关系支持薄弱.这也是所有 ...

  2. linux中文件或者文件夹的基本操作(复制,移动,删除,查找,压缩)

    linux 文件(文件夹)的创建,复制,移动,重命名,删除基本命令 复制文件或整个目录 cp 源文件名 目标文件夹/[目标文件名]cp -rv 源文件夹 目标文件夹/[目标文件夹名] --r 递归目录 ...

  3. Hihocoder1081 最短路径 结构体练习

    最短路径 :虽然做过很多次最短路的题,spfa,bellman,floyd都用过不少.但是题目强调的“顺序”又让我加深了对最短路的理解. 当然,主要还是练习下STL: pair型: #include& ...

  4. RabbitMQ学习系列三-C#代码接收处理消息

    RabbitMQ学习系列三:.net 环境下 C#代码订阅 RabbitMQ 消息并处理 http://www.80iter.com/blog/1438251320680361 http://www. ...

  5. Consul做服务发现

    使用Consul做服务发现的若干姿势 https://www.cnblogs.com/bossma/p/9756809.html 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后 ...

  6. Elasticsearch.net项目

    Elasticsearch.net项目实战 https://www.cnblogs.com/lucky_hu/p/9746736.html elasticsearch.net项目实战 @智客幸达 目录 ...

  7. 区分/不区分大小写的比较,查找字符串在另一字符串中的位置,字符串开头是否包括另一字符串 hasPrefix

    NSString *str; // 使用stringWithFormat生成一格式化字符串 str = [NSString stringWithFormat:@"This is %@&quo ...

  8. jmeter --- 测试计划里的元件

    1.线程组 线程组元件是任何一个测试计划的开始点.在一个测试计划中的所有元件都必须在某个线程组下.顾名思义,线程组元件控制JMeter执行你的测试计划时候使用的线程数量.对线程组的控制允许你: 设置线 ...

  9. Qt开发环境下载和安装

    Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...

  10. H5浏览器播放RTMP直播流

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...