nginx配置url中帶問號的rewrite跳轉

今天收到一個需求,要將一個帶查詢參數的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  # 跳轉後
相關文章
相關標籤/搜索