09-nginx Rewrite语法详解
和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语法详解的更多相关文章
- Nginx Rewrite语法详解
重写中用到的指令 if (条件) {} 设定条件,再进行重写 set #设置变量 return #返回状态码 return 403; break #跳出rewrite rewrite #重写 I ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- 【nginx运维基础(6)】Nginx的Rewrite语法详解
概述 重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力:而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接:它还可以提高你的网 ...
- Nginx Rewrite规则详解
Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等. Rewrite规则的最后一项参数为flag标记,支持的flag标记主要有以下几种 ...
- Nginx 常用全局变量 及Rewrite规则详解
每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...
- Nginx配置配置文件详解
文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...
- Nginx配置文件nginx.conf中文详解(转)
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- Nginx配置文件中文详解
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
随机推荐
- HDU - 5829:Rikka with Subset (NTT)
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...
- kali学习
kali视频学习 第二周 kali视频(1-5) 1.kali安装 2.基本配置 vmtools安装过程. 3.安全渗透测试一般流程 4.信息搜集之GoogleHack 5.信息搜集之目标获取 第三周 ...
- window.top.location
window.top.location的作用 top, 表示是顶层页面, 因为页面之中可能嵌入了 frame 等子页面,top表示最外面一层 Html代码 <html> <hea ...
- 剑指offer-第七章面试案例2(树中两个节点的公共祖先节点)
import java.util.LinkedList; import java.util.Queue; import java.util.Stack; //树中两个节点的最低公共祖先 //第一种情况 ...
- Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)
public class Search { public class BiTreeNode{ int m_nValue; BiTreeNode m_pLeft; BiTreeNode m_pRight ...
- IT售前经验谈
在IT界,成功的完成一个项目需要销售人员.售前人员.项目实施人员(开发人员).售后服务人员等密切协作.本文从售前技术支持人员的角度,对售前技术支持工作的过程进行了描述,根据作者在售前的经验,提出了各环 ...
- 封装Socket.BeginReceive/EndReceive以支持Timeout
Socket .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特 ...
- Linux环境安装redis
redis官网地址:http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget ...
- selenium - xpath - 定位
前言: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. 看这里介绍:w3school 首先来看一下xpath常用的语法: 一.xpath ...
- Linux 简单字符设备驱动
1.hello_drv.c (1) 初始化和卸载函数的格式是固定的,函数名自定义 (2) printk是内核的打印函数,用法与printf一致 (3) MODULE_LICENSE:模块代码支持开源协 ...