今天收到一個需求,要將一個帶查詢參數的url跳轉到另一個靜態url,安裝常規的rewrite規則,如:
rewrite ^/a.html?id=67$ http://zt.epython.cn/20190320/b.html; 錯誤的示範
這樣的跳轉起不了做用,由於nginx會把後面的一整串都認爲是URL,可是在瀏覽器上去,只會訪問到a.html這個文件.
而後google了一下,發現問號在nginx中是有特殊做用的,那咱們就須要使用其餘的方法了。在查詢nginx的參數的時候,發現了$query_string 和 $request_uri 兩個參數。
$query_string :請求行中(GET請求)的參數,也就是查詢參數;
$request_uri :包含請求參數的原始URI,不包含主機名,如:"/a.html?id=67",不能修改。
那麼咱們能夠想到兩種配置方法
第一種:
if ( $query_string ~ 「id=(.*)」 ) # 這裏寫能夠正則
{
rewrite ^/css/style.css http://www.epython.cn/
?;
# 這裏必需要加問號,不然會出現 跳轉次數過多的問題
}
第二種
if ( $request_uri ~ 「/a.html?id=67" )
{
rewrite ^/(.*)$ http://zt.epython.cn/20190320/b.html
?; # 跳轉後不帶查詢參數
}
# 直接跳轉 ;
if ( $request_uri ~ "/(.*).html\?id=epython" )
{
rewrite ^/(.*).html /css/style.css;
}
#
須要注意的是,這裏 在rewrite後的url 最後添加了一個問號,這樣作的目的是爲了去掉跳轉後 url後的傳過來的查詢參數;若是不加的話,那麼跳轉先後的url會是下面的樣子:
https://h5.epython.cn/a.html?id=67 # 跳轉前
http://zt.epython.cn/20190320/b.html?id=67 # 跳轉後