词条信息

admin
admin
超级管理员
词条创建者 发短消息   

相关词条

热门词条

更多>>
2019年路由器选购方案大推荐
路由器是个非常简单且有用的数码配件,虽然表面看起来没什么技术含量,但它对我们的日常生活影响是非常大的,重点是很...
如何挑选适合自己的Linux系统版本?
最近很多小伙伴私信我,说想学学Linux,但是由于平时没用过Linux系统,想让小编我帮着推荐一下用哪一个版本...
2019年10大最佳Hyper-V监控工具和软件
虚拟化的广泛使用一直是企业基础架构中最重要的趋势之一。企业通过虚拟化降低与管理和部署硬件设备相关的成本。微软H...
Wi-Fi探针是什么原理 怎么有效防范Wi-Fi探针
在下班回家的路上,你突然接到一个陌生人电话,对方直接说出了你的名字和一些私人信息套了个近乎,然后给你推荐了几个...
谷歌最新开源工具逆天了
近日,谷歌宣布开源ClusterFuzz,这是一个可扩展的模糊测试工具,可以运行在 25000 多个核心上的模...
解决网 >>所属分类 >> 网站建设    Nginx   

nginx中rewrite用法

标签: nginx rewrite

顶[0] 发表评论(0) 编辑词条

目录

一、rewrite规则编辑本段回目录


rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。


rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如http://seanlook.com/a/we/index.PHP?id=1&u=str 只对/a/we/index.php重写。语法rewrite regex replacement [flag];


如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。


二、rewrite与location区别及执行过程编辑本段回目录


表面看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:


1、执行server块的rewrite指令


2、执行location匹配


3、执行选定的location中的rewrite指令


提示:如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。


三、rewrite语法格式及参数说明编辑本段回目录


1、rewrite语法格式


rewrite语法格式:rewrite regex replacement [flag];


rewrite


<regex>


<replacement>


[flag];


关键字


正则


替代内容


flag标记


flag标记说明:


last #本条规则匹配完成后,继续向下匹配新的location URI规则


break #本条规则匹配完成即终止,不再匹配后面的任何规则


redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址


permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址


例1:rewrite ^/(.*) http://www.test.com/$1 permanent;


例1说明:


rewrite为固定关键字,表示开始进行rewrite匹配规则


regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址


replacement部分是http://www.test.com/$1,$1是取自regex部分()里的内容。匹配成功后跳转到的URL。


flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.test.com/$1 地址上


2、rewrite 常用正则表达式说明


字符


描述


.


匹配除换行符以外的任意字符


?


匹配前面的字符零次或一次


+


匹配前面的字符一次或多次


*


匹配前面的字符0次或多次


d


匹配一个数字字符。等价于[0-9]


将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“ ”匹配一个换行符,而“$”则匹配“$”


^


匹配字符串的开始


$


匹配字符串的结尾


{n}


匹配前面的字符n次


{n,}


匹配前面的字符n次或更多次


[c]


匹配单个字符c


[a-z]


匹配a-z小写字母的任意一个


小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是转义特殊字符。


3、if指令和可使用的全局变量


(1)if判断指令语法


if ( 条件判断 )


{ rewrite ... }


对给定的条件进行判断。如果为真,大括号内的rewrite指令将被执行,if条件可以是如下任何内容:当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false


=或!=


直接比较变量和内容


~


区分大小写正则表达式匹配


~*


不区分大小写的正则表达式匹配


!~


区分大小写的正则表达式不匹配


-f和!-f


用来判断文件是否存在


-d和!-d


用来判断目录是否存在


-e和!-e


用来判断文件或目录是否存在


-x和!-x


用来判断文件是否可执行


if指令语法实例


#如果UA包含"MSIE",rewrite请求到/msid/目录下


if ($http_user_agent ~ MSIE) {


rewrite ^(.*)$ /msie/$1 break;


}


#如果cookie匹配正则,设置变量$id等于正则引用部分


if ($http_cookie ~* "id=([^;]+)(?:;|$)") {


set $id $1;


}


#如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302


if ($request_method = POST) {


return 405;


}


#限速,$slow可以通过 set 指令设置


if ($slow) {


limit_rate 10k;


}


#如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查


if (!-f $request_filename){


break;


proxy_pass http://127.0.0.1;


}


#如果query string中包含"post=140",永久重定向到example.com


if ($args ~ post=140){


rewrite ^ http://example.com/ permanent;


}


#防盗链


location ~* .(gif|jpg|png|swf|flv)$ {


valid_referers none blocked www.jefflei.com www.leizhenfang.com;


if ($invalid_referer) {


return 404;


}


}


(2)if判断可使用的全局变量


变量名称


变量说明


$args


这个变量等于请求行中的参数,同$query_string


$content_length


请求头中的Content-length字段


$content_type


请求头中的Content-Type字段


$document_root


当前请求在root指令中指定的值


$host


请求主机头字段,否则为服务器名称


$http_user_agent


客户端agent信息


$http_cookie


客户端cookie信息


$limit_rate


这个变量可以限制连接速率


$request_method


客户端请求的动作,通常为GET或POST


$remote_addr


客户端的IP地址


$remote_port


客户端的端口


$remote_user


已经经过Auth Basic Module验证的用户名


$request_filename


当前请求的文件路径,由root或alias指令与URI请求生成


$scheme


HTTP方法(如http,https)


$server_protocol


请求使用的协议,通常是HTTP/1.0或HTTP/1.1


$server_addr


服务器地址,在完成一次系统调用后可以确定这个值


$server_name


服务器名称


$server_port


请求到达服务器的端口号


$request_uri


包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”


$uri


不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”


$document_uri


与$uri相同


例:


http://localhost:88/test1/test2/test.php


$host:localhost


$server_port:88


$request_uri:http://localhost:88/test1/test2/test.php


$document_uri:/test1/test2/test.php


$document_root:/var/www/html


$request_filename:/var/www/html/test1/test2/test.php

 

 

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇CPU的结构和工作原理
下一篇了解 Nginx 的基本概念

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>