网站首页 > 精选教程 正文
实际开发中经常有根据请求参数来路由到不同请求处理者的情况,根据POST请求参数需要些nginx插件,这里主要简单介绍下如何根据GET参数来路由。
1、location进行路径
最常见的是通过location进行路径匹配的时候,没办法是用正则表达一起捕获这个路径和querstring的。那么我想真的URL里面的Query String进行不同的rewrite,应该如何处理呢?答案就是$arg变量。
Nginx里面$query_string 与$args相同,存储了所提交的所有$query_string;比如&p=2887&q=test
如果想要在nginx里面单独访问这些变量。可以这样
比如$p变量可以这样访问 $arg_p
2、rewrite:
需求用到rewrite 其中有一个是要把a.PHP?id=2重定向到b-2.html
开始简单的写为
rewrite "^/a(.*)?(.*)#34; /b-$2.html permanent;
总是不能正确的301到b-2.html
查资料发现
rewrite只能针对请求的uri进行重写,/a.php问号后面的是请求参数,在nginx用$query_string表示,直接写这样的一条重写肯定不会正确匹配,因为rewrite参数只会匹配请求的uri,在写重写的时候需要把$query_string变量追加到重写的uri后面,为了防止uri中的参数追加到重写后的uri,可以在后面加个问号:
[html] view plain copy
if ($query_string ~ "id=(.*)") {
set $id $1;
rewrite ^/a.php$ /b-$id.html? permanent;
}
【示例1】
比如我们希望访问http://192.168.71.51:6061/do1.aspx?t=1212&c=uplog当url中的参数c为config或uplog的时候(忽略大小写)我们路由到其他地方:
下面是用这样一个实例讲述一下。
首先增加一个upstream:
[html] view plain copy
……
upstream other {
server 192.168.71.41:2210;
}
……
在location中加入判断:
[html] view plain copy
……
location / {
if ( $query_string ~* ^(.*)c=config\b|uplog\b(.*)$ ){
proxy_pass http://other;
}
……
【示例2】
要求是 如果请求中的$query_string包含"q=数字",301重新定向到首页交由index.php处理。否则只是301重新定向到首页。
[html] view plain copy
location ~* ^/wap/ {
# if ( $http_user_agent ~* "(MSIE|bot|Spider|Slurp)" ) {
# }
if ($args ~* "p=\d+#34;) {
rewrite ^ $scheme://$host/?p=$arg_p? permanent;
}
#Rewrite 后面带一个?表示在重定向中使用query_tring
rewrite ^/(.*)$ $scheme://$host/<del datetime="2012-01-24T14:18:20+00:00">?</del> permanent;
}
注:关于rewrite后面的问号,其作用是去除后面的qrerystring,不加?的话,就是这样的比如原来的query_string是p=2887,不加问号的话 是重新定向到
http://ihipop.info/?2887&p=2887 多了一个&p=2887这样产生的 URI 不是很美观。
【示例3】
[html] view plain copy
location / {
if ( $query_string ~* "p=\d+#34; ) {
proxy_pass http://www.ifeng.com;
}
proxy_pass http://www.baidu.com;
}
通过如上配置,当访问nginx时,如果后面带有p=数字的参数(http://10.153.140.42/?p=1),就会跳转到ifeng,否则跳转到baidu。
示例4
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
if ($arg_uatserver = "test"){
proxy_pass http://xxx.com;
}
if ( $query_string ~* "selftest+#34; ){
proxy_pass http://xxx.com;
}
}
在nginx中有几个关于uri的变量,包括$uri $request_uri $document_uri,下面看一下他们的区别 :
$request_uri: /getinfo.php?id=25648&web_id=20123
$uri /getinfo.php
$document_uri: /getinfo.php
- 上一篇: 「每天一道面试题」Nginx rewrite全局变量
- 下一篇: Nginx流控 nginx流控配置
猜你喜欢
- 2024-10-05 nginx 流量控制 nginx流量分发
- 2024-10-05 【shell编程】变量 shell变量运算
- 2024-10-05 Nginx流控 nginx流控配置
- 2024-10-05 「每天一道面试题」Nginx rewrite全局变量
- 2024-10-05 Nginx核心知识汇总,113页Nginx核心指南(后附项目实战)
- 2024-10-05 细述:nginx http内核模块提供的变量和解释
- 2024-10-05 Nginx之http框架提供的相关变量 nginx之http框架提供的相关变量是什么
- 2024-10-05 【nginx】十五、nginx高阶之openresty内置变量
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)