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_ ...
随机推荐
- 重读tcp-ip详解三卷:1
应用层 Http.Telnet.FTP和e-mail等 负责把数据传输到传输层或接收从传输层返回的数据传输层 TCP和UDP 主要为两台主机上的应用程序提供端到端的通信,TCP为两台主机提供高可靠性的 ...
- python 中出现 “IndentationError: expected an indented block” 问题
python 学习 在定义Python函数的时候如下 >>>def hello() . . .print "hello" 这样会报错的,报错如下: Indenta ...
- android wifi 热点、socket通讯
WiFi管理工具类 package com.wyf.app.common; import java.lang.reflect.InvocationTargetException; import jav ...
- K-means聚类分析MATLAB代码
function kmeans load q1x.dat; a1=round(98*rand+1); a2=round(98*rand+1); miao1=[q1x(a1,1),q1x(a1,2)]; ...
- Hoeffding inequality
Hoeffding公式为 \epsilon]\leq{2e^{-2\epsilon^2N}}"> 如果把Training error和Test error分别看成和的话,Hoeffdi ...
- 《DSP using MATLAB》示例Example7.15
代码: %T1 = 0.5 M = 40; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; Hrs = [ones(1, 5), 0.5, zeros(1, ...
- python 的os的总结
转:http://www.cnblogs.com/BeginMan/p/3327291.html
- yarn workspace 开发示例
此为官方示例: package.json { "private": true, "workspaces": [ "workspace-a", ...
- 解决 Flask-sqlalchemy 中文乱码
当在使用 flask-sqlalchemy 操作 mysql 数据库时中文乱码或者直接报错. 解决方法如下: from flask_sqlalchemy import SQLAlchemy db = ...
- Oracle存储过程使用总结
1.使用Oracle存储过程查询结果集: 网上写的都是他妈的扯淡!其实一句话就行了,你只要返回一个游标就OK了.具体代码如下: CREATE OR REPLACE PROCEDURE PR_ORDER ...