利用Nginx實(shí)現(xiàn)URL重定向的簡單方法
1. 概述
老話說的好:取乎上,得其中;取乎中,得其下。因此我們不妨把目標(biāo)定的高一些,去努力,才能得到更好回報。
言歸正傳,今天我們來聊聊 使用 Nginx 實(shí)現(xiàn) URL 的重定向。
2. 使用 Nginx 實(shí)現(xiàn) URL 的重定向
2.1 使用場景
我們?nèi)粘7窒硪粋€網(wǎng)站地址時,常常會有這樣的效果,同樣一個網(wǎng)址,在電腦的瀏覽器打開,是一種效果,而在手機(jī)的瀏覽器打開,就會展現(xiàn)出另一種更適合手機(jī)顯示的效果。
通常要達(dá)到這樣的效果,有兩種方式實(shí)現(xiàn):
一、使用自適應(yīng)的 H5 頁面實(shí)現(xiàn),根據(jù)窗口寬度的大小,自動調(diào)整頁面的布局。
二、使用Nginx,依據(jù)終端的不同,跳轉(zhuǎn)到不同的頁面,電腦打開,跳轉(zhuǎn)到 PC端 使用的網(wǎng)頁,手機(jī)打開,跳轉(zhuǎn)到 手機(jī)端 使用的網(wǎng)頁。
今天我們介紹一下第二種方式,是如何實(shí)現(xiàn)的。
2.2 單純的重定向
有些 URL 的重定向,新 URL 不需要繼承原 URL 的參數(shù),例如 網(wǎng)站首頁,這種情況,在 Nginx 配置文件的 location 中使用 return 302 的方式進(jìn)行跳轉(zhuǎn)即可。
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 依據(jù)原 URL 重定向
另一種情況就是 新 URL 需要繼承原 URL 的參數(shù),這種情況就需要使用 rewrite 對 URL 進(jìn)行改寫。
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 正則表達(dá)式 改寫后的URL redirect;
其中 redirect 是 302 臨時重定向的意思,也可以使用 permanent 關(guān)鍵字,代表 301 永久重定向。
使用 rewrite 對 URL 進(jìn)行改寫,需要用到 正則表達(dá)式 的知識,改寫后 URL 中的 $1、$2 代表正則表達(dá)式中匹配的第一個字符串和第二個字符串,這里大家可以去了解一下正則表達(dá)式,就不細(xì)說了。
例子中的正則表達(dá)式 (\w+-\w+)|(\?.*)$,可以將原 URL:
https://www.zhuifengren.com/1001-1223.jsp?v=123456
改寫為
https://www.zhuifengren.com/h5-1001-1223-0.html?v=123456
補(bǔ)充:Nginx根據(jù)url參數(shù)重定向
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參數(shù)
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; }
總結(jié)
到此這篇關(guān)于利用Nginx實(shí)現(xiàn)URL重定向的文章就介紹到這了,更多相關(guān)Nginx URL重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- nginx 老網(wǎng)站域名重定向到新網(wǎng)站的方法(親測)
- 在Nginx中實(shí)現(xiàn)URL重寫與重定向
- Nginx地址重定向的實(shí)現(xiàn)
- nginx的服務(wù)配置及重定向問題
- nginx重寫和重定向關(guān)系與配置方式
- nginx重定向解決(rewrite or internal redirection cycle)
- Nginx重定向后請求參數(shù)丟失的原因分析及解決方案
- nginx反向代理后無限重定向的問題解決方法
- Nginx中rewrite(地址重定向)的深入剖析
- 配置nginx 重定向到系統(tǒng)維護(hù)頁面
- nginx中重定向的實(shí)現(xiàn)
相關(guān)文章
Nginx禁止國外IP訪問我的網(wǎng)站的實(shí)現(xiàn)
本文主要介紹了Nginx禁止國外IP訪問我的網(wǎng)站的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07解析阿里云centos7服務(wù)器nginx配置及常見問題解答
這篇文章主要介紹了阿里云centos7服務(wù)器nginx配置及常見問題解答,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07通過nginx反向代理來調(diào)試代碼的實(shí)現(xiàn)
這篇文章主要介紹了通過nginx反向代理來調(diào)試代碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01nginx: [warn] "log_format" directive used only on "http" lev
這篇文章主要介紹了nginx: [warn] "log_format" directive used only on "http" level 解決方法,需要的朋友可以參考下2014-08-08Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例
這篇文章主要介紹了Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例,本文通過分析github發(fā)現(xiàn)這個應(yīng)用,可以避免在https的網(wǎng)站中出現(xiàn)http鏈接,需要的朋友可以參考下2015-03-03Nginx服務(wù)器的反向代理proxy_pass配置方法講解
這篇文章主要介紹了Nginx服務(wù)器的反向代理proxy_pass配置方法講解,包括經(jīng)常被提到的url的/問題的相關(guān)說明,需要的朋友可以參考下2016-01-01