nginx rewrite重写规则集合

摘要:
-x用于确定文件是否可以执行这三个参数的最后一个参数。rewrite命令是标志标志。flag标志为:1。Last相当于Apache中的[L]标志,表示重写。content_ Length#请求头中的内容长度字段。cookie_ cookie#cookieCOOKIE变量document_ Root#根命令中为当前请求指定的值。http_ user_ Agent#客户端代理信息http_ cookie#客户端cookie信息限制_速率#变量可以限制连接速率。remote_ User#已由AuthBasicModule验证的用户名。request_ Method#GET或POSTrequest_ Filename#当前请求的文件路径,由根或别名指令和URI请求生成。server_ Port#发送到服务器的请求的端口号。

本文根据网络搜索整理,不是原创

一.正则表达式匹配,其中:
~为区分大小写匹配
~*为不区分大小写匹配
!~和!~*  分别为区分大小写不匹配及不区分大小写不匹配
.      匹配除换行符以外的任意字符
w     匹配字母或数字或下划线或汉字
s     匹配任意的空白符
d     匹配数字
     匹配单词的开始或结束
^匹配字符串的开始
$      匹配字符串的结束
*重复零次或更多次
+重复一次或更多次
?      重复零次或一次
{n}     重复n次
{n,}     重复n次或更多次
{n,m}     重复n到m次
*?      复任意次,但尽可能少重复
+?      重复1次或更多次,但尽可能少重复
??      重复0次或1次,但尽可能少重复
{n,m}?    重复n到m次,但尽可能少重复
{n,}?    重复n次以上,但尽可能少重复
W     匹配任意不是字母,数字,下划线,汉字的字符
S     匹配任意不是空白符的字符
D     匹配任意非数字的字符
B     匹配不是单词开头或结束的位置
[^x]    匹配除了x以外的任意字符
[^aeiou]  匹配除了aeiou这几个字母以外的任意字符 
(exp)      匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)    匹配exp,不捕获匹配的文本,也不给此分组分配组号  
(?=exp)    匹配exp前面的位置
(?<=exp)   匹配exp后面的位置
(?!exp)    匹配后面跟的不是exp的位置
(?<!exp)   匹配前面不是exp的位置
(?#comment)  注释分组不对正则表达式的处理产生任何影响

二.文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
三.rewrite指令的最后一项参数为flag标记,flag标记有:
1.last    相当于apache里面的[L]标记,表示rewrite。
2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
3.redirect  返回302临时重定向,浏览器地址会显示跳转后的URL地址。
4.permanent  返回301永久重定向,浏览器地址会显示跳转后的URL地址。
四. 语法规则: 【= | ^~ | ~ | ~* | / | /uri 】
 location = /uri                =表示精确匹配,只有完全匹配上才能生效,若找到,停止搜索; 
 location ^~ /uri               ^~开头表示对URL路径进行前缀匹配,并且在正则匹配之前,若找到,停止搜索; 
 location ~ pattern             ~开头表示区分大小写的正则匹配,按配置文件顺序匹配; 
 location ~* pattern            ~*开头表示不区分大小写的正则匹配,按配置文件顺序匹配; 
 location /uri                  不带任何修饰符,表示前缀匹配,在正则匹配之后; 
 location /通用匹配,任何未匹配到其他location的请求都会匹配到,相当于default; 
五. 多个location配置的情况匹配顺序为
首先精确匹配 =;
其次前缀匹配 ^~;
其次是按照配置文件中的正则匹配; 
然后匹配不带任何修饰符的前缀匹配; 
最后交给/通用匹配;

nginx全局变量

arg_PARAMETER        #这个变量包含GET请求中,如果有变量PARAMETER时的值。
args                 #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
binary_remote_addr   #二进制的客户地址。
body_bytes_sent      #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
content_length       #请求头中的Content-length字段。
content_type         #请求头中的Content-Type字段。
cookie_COOKIE        #cookie COOKIE变量的值
document_root        #当前请求在root指令中指定的值。
document_uri         #与uri相同。
host                 #请求主机头字段,否则为服务器名称。
hostname             #Set to themachine’s hostname as returned by gethostname
http_HEADER
is_args              #如果有args参数,这个变量等于”?”,否则等于”",空值。
http_user_agent      #客户端agent信息
http_cookie          #客户端cookie信息
limit_rate           #这个变量可以限制连接速率。
query_string         #与args相同。
request_body_file    #客户端请求主体信息的临时文件名。
request_method       #客户端请求的动作,通常为GET或POST。
remote_addr          #客户端的IP地址。
remote_port          #客户端的端口。
remote_user          #已经经过Auth Basic Module验证的用户名。
request_completion   #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
request_method       #GET或POST
request_filename     #当前请求的文件路径,由root或alias指令与URI请求生成。
request_uri          #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
scheme               #HTTP方法(如http,https)。
server_protocol      #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
server_addr          #服务器地址,在完成一次系统调用后可以确定这个值。
server_name          #服务器名称。
server_port          #请求到达服务器的端口号。

nginx中rewrite 一些简单重写

禁止.mp3.sh访问
location ~ .*.(mp3|sh)$
{
return 403;
}

目录/hometest/ 重定向到 /www/temp/
rewrite ^/([0-9a-z]+)test/$ /www/$1 permanent;
例如:
访问 ceshitest.com/uuu/
结果重定向到 ceshitest.com/www/uuu/

文件/ceshi-123-456-789.html 重定向到 /ceshi/123/456/789.html
rewrite ^/ceshi-([0-9]+)-([0-9]+)-([0-9]+).html$ /ceshi/$1/$2/ceshitest_$3.html permanent;

根据表达式来重定向URI及修改字符串,只对相对路径有效;如果想配对主机名,需使用if语句,示例如下:
if( $host ~* www.(.*).(.*)$)
{
set $test1 $1;
set $test2 $2;
rewrite ^(.*)$ http://t=$test1&m=$test2 permanent;
}

例子:访问www.baidu.com
结果:浏览器会访问 http://baiducom/ ($1代表第1个括号内容$2代表第2括号内容)

免责声明:文章转载自《nginx rewrite重写规则集合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇css3 动画应用 animations 和transtions transform在加上JavaScript 可以实现硬件加速动画。关于:错误:无法将文件“objDebug est.exe”复制到“binDebug est.exe”。对路径“binDebug est.exe”的访问被拒绝。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx做本地目录映射

nginx做本地目录映射 有时候需要访问服务器上的一些静态资源,比如挂载其他设备上的图片到本地的目录,而本地的目录不在nginx根目录下,这个时候就需要简单的做一下目录映射来解决,比如想通过浏览器http://ip/image/2016/04/29/10/abc.jpg访问到系统目录/image_data/2016/04/29/10/abc.jpg需要在n...

[转]Windows 下 Nginx+IIS 使用

本文转自:https://blog.csdn.net/chihen/article/details/52698594 Windows 下 Nginx+IIS 使用 一、Nginx简介 Nginx ("engine x") 是一个高性能的HTTP 的 和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗...

解决ThinkPhp在nginx下404问题

 以宝塔面板为例:  找到宝塔面板域名的nginx配置文件进行编辑增加以下内容 fastcgi_split_path_info ^(.+.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastc...

简单的 nginx 多站点配置

测试环境:基于CentOS6.8 编译安装LNMP(http://www.cnblogs.com/afee666/p/6836161.html) 一 需求 在一个 VPS 主机上配置 web 服务器,实现通过一个 IP 访问多个站点或域名。 假设: IP地址: 66.88.33.11 域名1 test1.example.com放在 /web/www/tes...

vscode调试openresty

一、快速上手 1、软件下载   官网地址:https://code.visualstudio.com/   安装视频:https://code.visualstudio.com/docs/getstarted/introvideos 2、配置插件   插件安装:https://blog.csdn.net/qq_38161040/article/detail...

NGINX 从入门到精通,学会这些就够了

https://learnku.com/articles/46237 工作这么多年一直用的都是 NGINX,也一直想写总结,不过之前都是在上班,下班后就比较懒了,所以一直搁置着,趁着现在离职了有时间,就想把之前欠下的都补上,也算是对自己近年来工作技能的总结,希望这篇文章能帮助到你。 什么是 nginxNginx(发音同 “engine X”)是异步框架的网...