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/