nginx的rewrite规则
nginx rewrite相关的指令
break默认none,使用环境server location if
作用:完成当前的规则集,不在处理rewrite指令,eg
if($slow){
limit_rate 10k;
break;
}
if指令
语法 if(condition){...}默认none 使用环境 server location
作用:用于检查一个条件是否符合,符合则执行{}里的内容,不支持嵌套,不支持&&和||处理
以下信息可以被指定为条件:
1)变量名,错误的值包括空串"",或者任何以0开头的字符串
2)变量比较可以使用=和!=
3)正则表达式模式匹配可以使用~*和~符号
4)~表示区分字母大小写的匹配(eg:firefox与Firefox不匹配)
5)~*表示不区分字母大小写的匹配(eg:firefox与Firefox匹配)
6)!~和!~* 跟 ~和~* 的作用刚好相反
7)-f 和 !-f 用来判断文件是否存在
8)-d 和 !-d 用来判断目录是否存在
9)-e 和 !-e 用来判断文件或目录是否存在
10)-x 和 !-x 用来判断文件是否可执行
部分正则表达式可以在()内,其值可以通过后面的变量$1 到 $9 访问,eg:
return 指令
return code默认值none 使用环境server, location, if
作用:用于结束规则的执行并返回状态码给客户端,204,400,402~406,408,410,411,413,416及500~504可以使用在code中
eg,若访问的url以.sh和.bash结尾,返回403
location ~ .*\.(sh|bash)?${
return 403;
}
状态码:
204 no content,服务器响应成功,但无需返回实体内容,且需要返回更新了的元信息
400 Bad Request 服务器不能读懂请求,可能是语法错误
402 Payment Required 预留
403 Forbidden 服务器已理解请求,但拒绝执行
404 Not Found资源在服务器上未找到
405 Method not Allowed指定的请求方式不被允许
406 Not Acceptable请求资源的特性无法满足请求头中的条件,因而无法生成响应实体,除非是head请求,否则
应该返回一个包含可以让用户从中选择的实体特性及地址列表的实体
408 Request Timeout请求超时,客户端没有在服务器等待的实际内完成一个请求的发送
410 Gone请求资源不可用,永久,不确定是否永久不可用应该使用404 主要是帮助网站管理员维护网站,通知用户
该资源不再可用,并且希望所有指向该资源的远端链接都被删除
411 Length required拒绝接收没有Content-length头的请求
413 Reqest Entity Too Large请求体过大,超出服务器处理能力
500 Internet Server Error服务器的程序出现错误
502 Bad Gateway 作为网关或者代理的服务器尝试请求时未从上游服务器收到无效响应
503 Service Unavailable 由于服务器过载或者临时维护,暂时无法提供服务,但这个情况是临时的,一段时间后会恢复
可以在响应中包含Retry-after信息,告诉客户端可以在多久后重试
504 Gateway Timeout 作为网关或者代理的服务器尝试请求时未从上游服务器收到响应
rewrite指令:
rewrite regex replacement flag,默认none,使用环境server location if
作用:根据表达式来重定向url,或者修改字符串,它根据配置文件中的顺序来执行,eg:
if($host ~* www\.(.*)){
set $host_without_www $1;
rewrite ^(.*)$ http://$http_without_www$1 permanet;#$1 可以是 '/foo' 不可以是 'www.domain.com/foo'
}
若替换串以http开头,会采用301或者302跳转,rewrite指令的最好一项参数为flag支持的flag有:
last 表示完成rewrite
break 表示终止匹配
redirect 返回302重定向,浏览器会显示重定向后的地址
permanent 返回301永久重定向,浏览器会显示重定向后的地址
last和break用来实现url重写,浏览器地址不变,实际请求服务器的路径改变,二者功能类似,但是,
在alias中必须使用last标记,在proxy中要使用break表示,last表示在本条rewrite执行后会对其所在的server重新发起请求,儿break表示终止匹配,不再匹配后边的规则,eg,下边就必须使用break,使用last会死循环
location /cms/ {
proxy_pass http://nj.cc ;
rewrite "^/cms/(.*)\.html$" /cms/index.html break;
}
一般在根location中使用last,在非根location,如location /cms/{...}中使用break
rewrite ^/down/(.*)\/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^/down/(.*)\/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403 ;
location /down/ {
rewrite ^/down/(.*)\/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^/down/(.*)\/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
默认请求参数不会被附加到替换串上,可以使用?来解决
eg:请求http://nj.cc/test?id=5
rewrite ^/test(.*)$ http://nj.cc/home permanet 经过处理后变为 nj.cc/home
rewrite ^/test(.*)$ http://nj.cc/home? permanet 经过处理后变为 nj.cc/home?id=5
set指令:
set var val,默认none,使用环境server location if
用于定义一个变量,并赋值
eg:set $var 'char';
根据refer信息设置防盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.nj.com *.nj.com
if($valid_referer){
rewrite ^/(.*) http://nj.com/blocked.html;
}
}
apache和nginx指令对比:
apache的RewriteCond 对应 nginx的if
apache的RewriteRule 对应 nginx的rewrite
apache的[R]表记对应nginx的redirect
apache的[p]标记对应nginx的last
apache的[R,L]标记对应nginx的redirect
apache的[P,L]标记对应nginx的last
apache的[PT,L]标记对应nginx的last
使用举例:url重写和反向代理
location /news/ {
proxy_pass http://nj.cc ;
}
一个小的注意点:
#配置虚拟主机bbb.test.com
server {
listen 192.168.101.3:80;
server_name bbb.test.com;
location / {(一般匹配)
root /usr/local/bbb_html;
index index.html index.htm;
}
location =/ {(精准匹配)
root /usr/local/bbb_html;
index index.html index.htm;
}
location ~/ {(正则匹配)
root /usr/local/bbb_html;
index index.html index.htm;
}
}
location的三种匹配
精准匹配,一般匹配,正则匹配
同时存在时,先查找精准匹配,一旦匹配到,就停止匹配,
然后,查找一般匹配,匹配到之后,记录长度,但继续查找,返回匹配最长的记录,最后是正则匹配,一旦匹配到,就不再继续查找
也就是,index索引时,若是,正则匹配,则index的顺序不受影响,而一般匹配时索引的顺序则会影响显示
nginx的rewrite规则相关推荐
- 第七章:nginx的rewrite规则详解
模块ngx_http_rewrite_module 该ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向,并有条件地选择配置. 句法: break; ...
- nginx配置文件rewrite规则
nginx配置文件rewrite规则 文章目录 nginx配置文件rewrite规则 @[toc] if Rewite 规则介绍 flag标志位 配置rewrite规则 last二次转发 if 语法: ...
- Nginx 之 Rewrite 规则
最近学习了Nginx,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用 Nginx 之 Rewrite 规则
- nginx的Rewrite规则详解
set指令 该指令用来设置一个新的变量. 语法 set $variable value; 默认值 - 位置 server,location,if variable:变量的名称,该变量名称要用" ...
- nginx之rewrite规则未加引号导致检查nginx语法报错
在nginx的站点配置文件中使用了rewrite,检查rewrite规则确定是没问题,但是在rewrite中带有"{}"时,此时检查nginx语法报错 rewrite规则: [ro ...
- Nginx基础——Rewrite规则
Rewrite规则学习记录 rewrite是nginx一个特别重要的指令,该指令可以使用正则表达式改写URI.可以指定一个或多个rewrite指令,按顺序匹配. 正则匹配规则 1~ 区分大小写匹配 2 ...
- nginx下rewrite规则中参数超过10 $10 解决方案
来源:http://jimingsong.iteye.com/blog/1770737
- nginx之线上CDN的rewrite规则修改
线上的CDN厂商的nginx的rewrite规则配置验证 环境介绍: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release ...
- Nginx Rewrite规则初探
Nginx rewrite(nginx url地址重写) Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要N ...
最新文章
- 基于wifi的单片机无线通信研究_SKYLAB:智能家居无线协议WiFi/BLE/Zigbee介绍与对比...
- 缓存之EHCache(二)
- 实测java 与php运行速度比较
- leetcode —— 面试题29. 顺时针打印矩阵
- 推荐时代的内容理解技术探索.pdf(附下载链接)
- BI如何在企业信息化中助ERP一臂之力?
- 华数机器人编程语言_招新 | 海大最「酷」的科创团队,确定不来了解一下吗?...
- html语言的前景,HTML5语言的优势有哪些?2021年还有前景么?
- hadoop hive窗口函数求和
- 遇到问题--python---ImportError: Missing optional dependency ‘xlrd‘. Install xlrd >= 1.0.0 for Excel supp
- 工作三年的java程序员修行之路
- 怎么实现红鲤鱼与绿鲤鱼与驴代码
- 基于opencv的手势识别(HSV)控制鼠标
- POST http://域名:8080/项目/base/api/login/user/login net::ERR_CONNECTION_RESET 错误
- ‘xxx‘ is assigned a value but never used.
- 这才是纯爷们!!!~~~~~~
- 正大国际琪貨召主涨户:股指期货套期保值交易可分为哪几类
- android ios 垃圾回收,iOS 面试题(16):解释垃圾回收的原理
- 基于Echarts和百度地图的HTML插件
- Godaddy主机修改PHP版本教程,GoDaddy主机如何在后台更改主域名最新图文教程