Nginx重写
一、location匹配
1.分类:
(1)正则location:~,~*
(2)普通location:=,^~,@,无
2.匹配规则:
(1) = 精确匹配。如果找到,停止搜索
(2) ^~ 普通匹配,匹配路径的前缀,如果找到,停止搜索,不继续匹配正则
(3) ~ 正则匹配,区分大小写
(4) ~* 正则匹配,不区分大小写
(5) !~ 正则不匹配,不区分大小写
(6) !~* 正则不匹配,区分大小写
(7) / 通用匹配,任何请求都会匹配到
(8) @ 命名location,内部重定向
3.匹配顺序:
(1)进行精确匹配(=),如果匹配上,停止搜索。否则继续下一步;
(2)进行普通匹配,如果找到完整匹配路径停止搜索。否则继续下一步;
(3)匹配最大前缀,如果它带有^~,停止搜索,否则记录这个最大前缀匹配,继续下一步;
(4)进行正则匹配(~和~*),按顺序逐个匹配,如果匹配上,停止搜索,否则使用上一步记录的最大前缀匹配。
4.优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 最大前缀匹配路径) > (/)
二、目录/文件判断
1.-f和!-f用来判断是否存在文件
2.-d和!-d用来判断是否存在目录
3.-e和!-e用来判断是否存在文件或目录
4.-x和!-x用来判断文件是否可执行
三、指令
1.location 指令
语法:location [=|~|~*|^~|@] URI {}
作用域:server
为匹配的URI进行配置,URI可以是字符串或正则表达式
示例:
location ~ .*\.(gif|jpg|jpeg|png)$
{
expires 30d;
}
2.if 指令
语法:if (){}
作用域:server,location
检查一个条件是否符合,如果条件符合,则执行大括号内的语句。不支持嵌套和多个条件&&或||处理
示例:
if ( !-e $request_filename )
{
rewrite ^/(.*)$ index.php last;
}
3.try_files 指令
语法:try_files file1 [file2 ... filen] URI 或 try_files file1 [file2 ... filen] =code
作用域:server location
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。注意,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args不会自动保留,如果你想保留$args,则必须明确声明
示例:
try_files $uri $uri/ /index.php?$args;
try_files $uri =;
4.set 指令
语法:set variable value;
作用域:server,location,if
定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合
示例:
set $a "hello world";
5.break 指令
语法:break;
作用域:server,location,if
完成当前的规则集,不再处理rewrite指令
示例:
location ~ ^/(cron|templates)/
{
deny all;
break;
}
6.return 指令
语法:return code;
作用域:server,location,if
结束执行并返回状态码给客户端。
示例:如果访问的URI以".sh"或".bash"结尾,则返回403状态码
location ~ .*\.(sh|flv|mp3)$
{
return ;
}
7.rewrite 指令
语法:rewrite regex replacement flag;
作用域:server,location,if
根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意,重写表达式只对相对路径有效
示例:
if( $host ~* www\.(.*) )
{
set $domain $;
rewrite ^(.*)$ http://$domain$1 permanent;
}
rewrite的flag标记:
last 将rewrite后的地址重新在server标签执行,地址栏url不变。超过10次匹配不到报500错误。使用alias指令必须用last标记
break 直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变
redirect 返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url
permanent 返回301永久重定向,地址栏显示重定向后的url,爬虫更新url,对搜索引擎友好
Nginx重写的更多相关文章
- 17.Nginx 重写(location rewrite)
Nginx 重写(location / rewrite) 目录 Nginx 重写(location / rewrite) 常见的nginx正则表达式 location lication的分类 loca ...
- nginx 重写 rewrite 基础及实例
nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否 ...
- nginx 重写 rewrite 基础及实例(转)
nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否 ...
- nginx重写模块
参考:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html 1 语法 Syntax: if (condition) { ... } De ...
- Nginx重写请求后将url?后的参数去除
2019独角兽企业重金招聘Python工程师标准>>> 使用?结尾 注意,关键点就在于"?"这个尾缀.重定向的目标地址结尾处如果加了?号,则不会再转发传递 ...
- Nginx重写功能(rewrite与location)
一.常用的Nginx 正则表达式 二.访问路由location 2.1location的分类 location 大致可以分为三类: 精准匹配:location = / {} 一般匹配:location ...
- nginx重写rewrite的[emerg] unknown directive
今天写nginx的重写规则.怎么写总是报这个错误.
- nginx 重写
rewrite指令可在 server 块或者 location 块中配置. 语法: rewrite regex replacement [flag]; 1.rewrite 接收的 uri 不包含 ho ...
- nginx 重写 隐藏index.php
修改 nginx.conf 文件location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break ...
随机推荐
- 用SqlBulkCopy批量安插数据时提示来自数据源的 String 类型的给定值不能转换为指定目标列的类型 int
dr["description"] = ds.Tables[0].Rows[i]["组织描述"].ToString(); dr[& ...
- 通用js函数集锦<来源于网络> 【二】
通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...
- python基础01 Hello World!
摘要:简单的Hello Word! python 命令行 如已经安装python,那么在linux命令行中输入 $python 将进入python.乱吼在命令行提示符>>>后面输入 ...
- NOIP2016普及
还记得去年局部变量忘记置零coin爆零的事......结果我今年又要考一年普及[趴 最近沉迷分块莫队无法自拔,这几天才想起来我是个普及组选手 几乎没准备普及,周六上午抱抱佛脚好了...... 希望能顺 ...
- matlab 求解线性方程组之范数
1.赋范线性空间和内积空间 在线性代数的初级教材里,一般是在向量空间中定义内积,然后再由内积来导出范数,比如在n维实向量空间中: |x||=√<x,x> 在线性代数的高级教材中,一般是将内 ...
- jquery 获取奇数索引的元素
$(".btn-xs:odd").click(function(){ var $buy_num=$(this).prev("#buy_num").val(); ...
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
报异常的方法内使用了Java 7的新特性:自动资源释放,类似于try(){},即在try后面跟一括号,在括号里面对一些资源赋值,try里面的代码块执行完毕之后会自动释放try后面的括号中声明的资源. ...
- IIS 连接 oracle报Oracle.DataAccess版本错误解决办法
通过IIS连接oracle时报“Could not load file or assembly 'Oracle.DataAccess, Version=2.112.3.0, Culture=neutr ...
- 使用mybatis-generator生成代码
文档地址: http://mbg.cndocs.tk/index.html 以下是一个简单的配置内容. 一.在maven配置文件中添加mybatis-generator插件 1 2 3 4 5 ...
- MVC框架
MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用 ...