亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

 

本篇主要對于Nginx中的Rewrite跳轉進行講解。因為目前很多工作前端開發都會選擇使用Nginx作為反向代理服務器,但是平時業務需要難免碰到重寫URL,Nginx的Rewrite跳轉有什么使用場景呢?

  • 公司更換域名需要訪問舊域名時跳轉到新域名
  • 請求靜態文件跳轉到CDN
  • 根據用戶設備不同跳轉到不同站點(pc端,移動端)

不得不說的是Apache服務器規則庫很強大,做跳轉也很簡單,但是Nginx使用Rewrite實現跳轉效率更高,所以這也是我們需要學習Nginx的Rewrite模塊的目的所在。Rewrite是Nginx的靜態重寫模塊,跳轉的使用場景有以下幾種情形:

  • 可以改變用戶訪問的URL
  • 可以將動態URL偽裝成靜態URL提供服務
  • 可以訪問舊域名時跳轉到新域名
  • 可以根據變量,目錄,客戶端信息等跳轉不同的URL

Rewrite如何實現跳轉?

Nginx利用ngxhttprewrite_module模塊解析和處理rewrite請求。Rewrite用于實現URL重寫,其實有點類似于重定向功能,可以將用戶的請求重寫至別的目錄,在一定程度上提高了網站安全性。Rewrite支持if條件判斷,但不支持else判斷。而且Rewrite需要PCRE支持,一次重定向最多可以跳轉10次,超過10次將返回500錯誤。Rewrite模塊包含set命令,可以創建變量用來記錄條件標識或者傳遞變量到其他的Location中。Rewrite實際上就是使用Nginx已有的全局變量或者通過set命令設置的變量結合正則表達式實現URL重寫。

Rewrite使用場景

在Nginx中使用Rewrite實現跳轉有以下三種場景:

  • 直接用Rewrite進行匹配跳轉
  • 使用if匹配全局變量進行跳轉
  • 使用location匹配再進行跳轉

所以說rewrite語句只允許放在server{ },if{ },location{ }中。接下來我們先看看if指令。

if指令

if指令用于條件匹配判斷,根據判斷結果選擇不同的Nginx配置,在server或location中配置。Nginx中的if指令只支持單重判斷,不支持多重判斷。我們簡單看個例子:

location /test{

index index.html;

if ( $scheme = http ){

rewrite / https://www.niyueling.cn permanent;

}

if ($scheme = https ){

echo "if ---> $scheme";

}

> }

location上篇文章講過了,這里不再細講,接下來我們看下rewrite語法.

rewrite語法

  • rewrite regex replacement [flag]

rewrite將用戶請求的URL基于正則表達式regex進行檢查,匹配到時將其替換為正則表達式對應的新的URL。若在同一級配置模塊中存在多個rewrite規則,則會自頂向下檢查。replacement則為跳轉后的內容。[flag]作為標識符用于控制循環機制,如果替換后的URL是以http或者https開頭,則會直接301永久重定向。

flag參數介紹

rewrite語句有四種flag狀態:redirect、permanent、break、last。前兩種屬于客戶瀏覽器重新發起對新地址的請求,后兩種是在WEB服務器內部實現跳轉。

  • redirect #臨時重定向,重寫完成后以臨時重定向方式直接返回重寫后生成的新URL給客戶端,有客戶端重新發起請求,使用相對路徑,http://或https://開頭,狀態碼:302
  • permanent #永久重定向,以永久重定向的方式直接返回重寫后生成的新URL給客戶端,由客戶端重新發起新的請求,狀態碼:301
  • last #重寫完成后停止對當前location中后續的其他重寫操作,而后對新的URL啟動新一輪重寫檢查,不建議在location中使用
  • break #重寫完成后停止對當前URL在當前location中后續的其他重寫操作,而后直接跳轉至重寫規則匹配塊之后的其他配置;結束循環,建議在location中使用
Nginx 實現 Rewrite 跳轉

 

  •  

rewrite語法講完了我們可以一起來看看如何實現幾種方式跳轉:

(1) 在location中將舊域名永久重定向到新域名

location / {

root /data/html;

index index.html;

rewrite / http://www.niyueling.cn permanent;

}

這里有必要提下臨時重定向與永久重定向的區別:

臨時重定向不會緩存新域名的解析記錄,但是永久重定向會緩存新域名的解析記錄。

(2) http自動跳轉https

有時候公司項目需要,會要求整個網站皆使用https,這時候為了用戶體驗,我們需要在用戶訪問http站點的時候自動跳轉到https站點中。

location / {

root /opt/blog;

index index.html;

if ( $scheme = http ){

rewrite / https://www.niyueling.cn permanent;

}

}

上面配置其實就是如果用戶請求協議為http的時候使用rewrite跳轉到對應的https站點。但是if語句不能去掉,否則就會陷入死循環。

(3) 如果用戶請求URL不存在跳轉首頁

location / {root /opt/blog;index index.html;if ( !-f $request_filename ){rewrite (.*) http://www.niyueling.cn;}}

(4) 實現防盜鏈

防盜鏈實際上是基于前端攜帶的referer實現,referer可以記錄用戶從哪個界面跳轉而來的標志信息。Nginx可以通過ungxhttpreferrer_module模塊來檢查請求的referer信息是否有效實現防盜鏈功能

location ^~ /test {root /opt/blog;index index.html;validreferers none blocked servernames .niyueling.cn www.niyueling.api.online.test/v1/hostlist ~.google. ~.baidu.; #定義有效的refererif ($invalid_referer) { #假如是使用其他的無效的referer訪問:return 403; #返回狀態碼403}}

如果喜歡我的文章,歡迎關注我的個人公眾號

本文由博客一文多發平臺 https://openwrite.cn?from=article_bottom 發布!

分享到:
標簽:Nginx Rewrite
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定