首頁 > 軟體

利用Nginx實現URL重定向的簡單方法

2022-04-11 10:01:57

1. 概述

老話說的好:取乎上,得其中;取乎中,得其下。因此我們不妨把目標定的高一些,去努力,才能得到更好回報。

言歸正傳,今天我們來聊聊 使用 Nginx 實現 URL 的重定向。

2. 使用 Nginx 實現 URL 的重定向

2.1 使用場景

我們日常分享一個網站地址時,常常會有這樣的效果,同樣一個網址,在電腦的瀏覽器開啟,是一種效果,而在手機的瀏覽器開啟,就會展現出另一種更適合手機顯示的效果。

通常要達到這樣的效果,有兩種方式實現:

一、使用自適應的 H5 頁面實現,根據視窗寬度的大小,自動調整頁面的佈局。

二、使用Nginx,依據終端的不同,跳轉到不同的頁面,電腦開啟,跳轉到 PC端 使用的網頁,手機開啟,跳轉到 手機端 使用的網頁。

今天我們介紹一下第二種方式,是如何實現的。

2.2 單純的重定向

有些 URL 的重定向,新 URL 不需要繼承原 URL 的引數,例如 網站首頁,這種情況,在 Nginx 組態檔的 location 中使用 return 302 的方式進行跳轉即可。

location / {
        # 判斷是否是行動端
        if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
        {
            return 302 https://www.zhuifengren.com/h5/index.html;
        }
 
        proxy_pass http://myUpstream;
 }

2.3 依據原 URL 重定向

另一種情況就是 新 URL 需要繼承原 URL 的引數,這種情況就需要使用  rewrite 對 URL 進行改寫。

location / {
        # 判斷是否是行動端
        if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
        {
            rewrite (w+-w+)|(?.*)$ https://www.zhuifengren.com/h5-$1-0.html$2 redirect;        
        }    
 
        proxy_pass http://myUpstream;
}

rewrite 的語法是: rewrite  正規表示式  改寫後的URL  redirect;

其中 redirect 是 302 臨時重定向的意思,也可以使用 permanent 關鍵字,代表 301 永久重定向。

使用 rewrite 對 URL 進行改寫,需要用到 正規表示式 的知識,改寫後 URL 中的 $1、$2 代表正規表示式中匹配的第一個字串和第二個字串,這裡大家可以去了解一下正規表示式,就不細說了。

例子中的正規表示式 (w+-w+)|(?.*)$,可以將原 URL:

https://www.zhuifengren.com/1001-1223.jsp?v=123456

改寫為

https://www.zhuifengren.com/h5-1001-1223-0.html?v=123456

補充:Nginx根據url引數重定向

1.判斷url路徑

location / {
    if ($args ~* "/product-list?param1=val1&param2=val2") {
        rewrite ^ http://www.mysite.com/product-list/$arg_param1/$arg_param2? last;
    }
}

2. 判斷url引數

if ($arg_path = 'abc'){
	proxy_pass http://127.0.0.1/abc/$arg_path;
}

特別注意if is evil,nginx不提供多if判斷,沒有or這樣的判斷,所以只能用下文這種方式。

location /api/ {
        if ($arg_token = '') {
        	proxy_pass http://127.0.0.1/abc
        }
        if ($http_token = '') {
             proxy_pass http://127.0.0.2/abc
        }
        if ($token = paraheader) {
        	 proxy_pass http://127.0.0.3/abc
        }
        proxy_pass http://127.0.0.1:8080/app/;
        proxy_redirect off;
    }

總結

到此這篇關於利用Nginx實現URL重定向的文章就介紹到這了,更多相關Nginx URL重定向內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com