網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
1. 概述
老話說(shuō)的好:取乎上,得其中;取乎中,得其下。因此我們不妨把目標(biāo)定的高一些,去努力,才能得到更好回報(bào)。
言歸正傳,今天我們來(lái)聊聊 使用 Nginx 實(shí)現(xiàn) URL 的重定向。
2. 使用 Nginx 實(shí)現(xiàn) URL 的重定向
2.1 使用場(chǎng)景
我們?nèi)粘7窒硪粋€(gè)網(wǎng)站地址時(shí),常常會(huì)有這樣的效果,同樣一個(gè)網(wǎng)址,在電腦的瀏覽器打開,是一種效果,而在手機(jī)的瀏覽器打開,就會(huì)展現(xiàn)出另一種更適合手機(jī)顯示的效果。
通常要達(dá)到這樣的效果,有兩種方式實(shí)現(xiàn):
一、使用自適應(yīng)的 H5 頁(yè)面實(shí)現(xiàn),根據(jù)窗口寬度的大小,自動(dòng)調(diào)整頁(yè)面的布局。
二、使用Nginx,依據(jù)終端的不同,跳轉(zhuǎn)到不同的頁(yè)面,電腦打開,跳轉(zhuǎn)到 PC端 使用的網(wǎng)頁(yè),手機(jī)打開,跳轉(zhuǎn)到 手機(jī)端 使用的網(wǎng)頁(yè)。
今天我們介紹一下第二種方式,是如何實(shí)現(xiàn)的。
2.2 單純的重定向
有些 URL 的重定向,新 URL 不需要繼承原 URL 的參數(shù),例如 網(wǎng)站首頁(yè),這種情況,在 Nginx 配置文件的 location 中使用 return 302 的方式進(jìn)行跳轉(zhuǎn)即可。
location / { # 判斷是否是移動(dòng)端 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 對(duì) URL 進(jìn)行改寫。
location / { # 判斷是否是移動(dòng)端 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 的語(yǔ)法是: rewrite ?正則表達(dá)式 ?改寫后的URL ?redirect;
其中 redirect 是 302 臨時(shí)重定向的意思,也可以使用 permanent 關(guān)鍵字,代表 301 永久重定向。
使用 rewrite 對(duì) URL 進(jìn)行改寫,需要用到 正則表達(dá)式 的知識(shí),改寫后 URL 中的 $1、$2 代表正則表達(dá)式中匹配的第一個(gè)字符串和第二個(gè)字符串,這里大家可以去了解一下正則表達(dá)式,就不細(xì)說(shuō)了。
例子中的正則表達(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¶m2=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é)
原文鏈接:https://blog.csdn.net/u011181989/article/details/124086961
相關(guān)推薦
- 2022-05-31 如何用python合并多個(gè)有規(guī)則命名的nc文件_python
- 2022-02-28 獲取元素的寬度,高度
- 2023-02-02 C語(yǔ)言動(dòng)態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解_C 語(yǔ)言
- 2022-11-14 解讀python正則表達(dá)式括號(hào)問(wèn)題_python
- 2022-03-20 .NET+Sqlite支持加密的操作方法_實(shí)用技巧
- 2022-01-08 vscode推送代碼失敗,報(bào)錯(cuò)You are not allowed to push code to
- 2022-06-26 python數(shù)據(jù)處理之Pandas類型轉(zhuǎn)換的實(shí)現(xiàn)_python
- 2022-11-10 Android拍攝照片后返回縮略圖的方法_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支