nginx带问号(?)带参数的rewrite规则的书写方法,很不错的文章,感兴趣的朋友可以参考下。
今天收到一个需求,要根据程序员的需要给定php的参数来跳转到指定的页面,安装常规的rewrite规则,如:rewrite ^/change.php?id=weibo http://www.weibo.com/; (错误的示范)
这样的跳转起不了左右,因为nginx会把后面的一整串都认为是URL,但是在浏览器上去,只会访问到change.php这个文件。
那只能想别的方法了,仔细看了nginx的各项参数,注意到里面的
$query_string 解释:请求行中(GET请求)的参数;(配置1)
$request_uri 解释:包含请求参数的原始URI,不包含主机名,如:"/change.php?id=163",不能修改。
(配置2)
那我们就根据参数来判断是否要跳转。
配置如下
(配置1):
方便复制:
if ( $query_string ~ "id=(baidu)(.*)$" )
{
rewrite ^/css/style.css http://www.baidu.com/;
}
if ( $query_string ~ "id=(qq|QQ)(.*)$" )
{
rewrite ^/ http://www.qq.com/;
}
(配置2):
方便复制:
if ( $request_uri ~ "/(.*).html?id=163" )
{
rewrite ^/ http://www.163.com/;
}
# 直接跳转到163 ;
if ( $request_uri ~ "/(.*).html?id=sohu" )
{
rewrite ^/(.*).html /css/style.css;
}
# *.html?id=sohu 跳转到/css/style.css;伪静态
测试:
1,测试跳转到百度:
2,测试跳转到QQ:
3,测试跳转到微博:
4,测试跳转到163:
从测试结果来看,配置成功。
原文作者:李坤山
博客链接:http://blog.163.com/a12333a_li/