nginx-rewrite階段(6.7更新)

nginx的rewite階段主要進(jìn)行l(wèi)ocation的匹配和重定向

其中主要有這幾個(gè)指令需要了解:return诸迟、rewrite和if
兩者都可出現(xiàn)在location和server塊下

1.return指令

return code [URI/text]  /  URI;
如return 200 '$remote_addr' 返回200狀態(tài)碼

當(dāng)然return 指令也可用于重定向
這里需要了解重定向狀態(tài)碼
301 永久重定向
302 臨時(shí)重定向茸炒,禁止被緩存
303 臨時(shí)重定向,允許改變方法,禁止被緩存
307 臨時(shí)重定向,不允許改變方法阵苇,禁止被緩存
308 永久重定向
關(guān)于臨時(shí)重定向和永久重定向 http://www.reibang.com/p/2dc79de7da3a

error_page和return

error_page語(yǔ)法

error_page code [=URI]  即出現(xiàn)指定code時(shí)才進(jìn)行重定向

實(shí)驗(yàn):
情況1.當(dāng)return和error_page都出現(xiàn)在server塊時(shí)
nginx配置(404意思為訪(fǎng)問(wèn)資源不存在壁公,405意思為訪(fǎng)問(wèn)的請(qǐng)求方式錯(cuò)誤)

       error_page  404    405         /404.html;
        return 405 'is 405\n';
        location / {
           #return 200 '$remote_addr\n';
        }

curl 127.0.0.1 和 curl 127.0.0.1/aaa.txt(一個(gè)不存在的文件,即404錯(cuò)誤)
結(jié)果: is 405
總結(jié)error_page和return 在同一快下慎玖,即使出錯(cuò)也還是以retun為主

情況2.當(dāng)return和error_page都出現(xiàn)贮尖,但在不同塊下
nginx配置

        error_page  404   405    /404.html;
        #return 405 'is 405\n';
        location /test {
           return 200 'is 200\n';
        }

執(zhí)行命令
curl 127.0.0.1/aaa.txt(一個(gè)不存在的文件)
結(jié)果是返回了404.html的內(nèi)容
curl 127.0.0.1/test/aaa.txt(一個(gè)不存在的文件)
結(jié)果 is 200
總結(jié) return是大哥

2.rewrite指令

語(yǔ)法

rewrite regex replacement [flag];
#將regex替換為replacement,可以用正則提取變量

注意:當(dāng)replacement以httlp://或https://或$schema開(kāi)頭直接進(jìn)行302重定向

實(shí)驗(yàn)1
nginx server塊下配置如下

rewrite /1.txt /2.txt;
#html目錄下有1.txt和2.txt內(nèi)容分別為1和2

curl 127.0.0.1/1.txt
結(jié)果為2
查看響應(yīng)頭部 curl 127.0.0.1/1.txt -I
響應(yīng)碼為200
修改配置

rewrite /1(.*)  http://你的ip/2$1;
# 此時(shí)訪(fǎng)問(wèn)/1.txt時(shí)  $1 = .txt 即訪(fǎng)問(wèn) /2.txt

curl 訪(fǎng)問(wèn) 響應(yīng)碼為302趁怔,瀏覽器顯示結(jié)果為2

關(guān)于flag

nginx配置如下

        location /first {
           rewrite /first(.*)  /second$1 last;
           return 200 'is 1\n';
        }

        location /second {
           rewrite /second(.*)  /third$1 break;
           return 200 'is 2\n';
        }

        location /third {
           return 200 'is 3\n';
        }

其中html目錄樹(shù)如下

├── first
│   └── 1.txt    //1
├── index.html
├── index.php
├── second
│   └── 1.txt  //2
└── third
    └── 1.txt  //3

flag = --last
表示會(huì)用replacement這個(gè)URI重新進(jìn)行l(wèi)ocation匹配湿硝,響應(yīng)碼為200
--break 停止當(dāng)前腳本指令執(zhí)行
--redirect 響應(yīng)碼為302,同理last
--permanent響應(yīng)碼為301润努,同理last

分別進(jìn)行curl 127.0.0.1/first/1.txt 和 curl 127.0.0.1/first/1.txt -I
響應(yīng)碼200 結(jié)果為 3
分析:
/first/1.txt 被重定向到 /second/1.txt 因?yàn)闉閘ast,再進(jìn)行一次location匹配关斜,而后又被重定向成立/third/1.txt,因?yàn)闉閎reak此時(shí)后面的代碼不再執(zhí)行 铺浇,同時(shí)停止匹配直接去thrid下找1.txt文件

flag加不加的區(qū)別

修改nginx配置

        location /second {
           rewrite /second(.*)  /third$1 ; //去掉break或last
           return 200 'is 2\n';
        }

curl 127.0.0.1/first/1.txt
結(jié)果為 is 2;即return 200 'is 2\n';繼續(xù)被執(zhí)行
特殊情況:當(dāng)replacement為http等開(kāi)頭時(shí)痢畜,后面也不執(zhí)行

關(guān)于日志

rewrite_log on 開(kāi)啟時(shí)重定向日志會(huì)被記錄到err.log中

        rewrite_log on;
        error_log logs/rewrite_error.log notice;

3.if指令

與編程的指令一樣邏輯,基于變量執(zhí)行
內(nèi)置變量官方文檔
nginx內(nèi)置變量:https://blog.csdn.net/Dream_be_L/article/details/95047006
if常用判斷邏輯:https://www.cnblogs.com/songxingzhu/p/6382007.html

       location / {
           if ($request_method = GET){
              return 405;
           }
           return 200 'hi\n';
       }
#如使用GET方法訪(fǎng)問(wèn)直接返回405錯(cuò)誤

注意w⒙隆6∠ ! if 和 ( 中間需要 空格R芯邸O呱馈!

拓展

關(guān)于響應(yīng)碼301/302/303

301表示永久重定向惑折,此次資源已經(jīng)不存在了需要改用新的資源(如文件夾的移動(dòng),http到https的升級(jí))
302表示臨時(shí)重定向授账,資源還在枯跑,但暫時(shí)需要用另一個(gè)url訪(fǎng)問(wèn)(如未登錄重定向到login),因?yàn)槭桥R時(shí)的所以禁止被緩存
兩者都會(huì)在http頭部增加一個(gè)location字段表示新的url


image.png

303/307/308都是HTTP1.1標(biāo)準(zhǔn)中新增的
303表示臨時(shí)重定向白热,允許改變方法
307臨時(shí)重定向敛助,不允許改變方法
308永久重定向,不允許改變方法

304比較特殊它用于 If-Modified-Since 等條件請(qǐng)求
表示訪(fǎng)問(wèn)的資源未被修改屋确,用于緩存控制纳击,表示已經(jīng)重定向到緩存的文件(即緩存重定向)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乍恐,隨后出現(xiàn)的幾起案子评疗,更是在濱河造成了極大的恐慌,老刑警劉巖茵烈,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百匆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡呜投,警方通過(guò)查閱死者的電腦和手機(jī)加匈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仑荐,“玉大人雕拼,你說(shuō)我怎么就攤上這事≌痴校” “怎么了啥寇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)洒扎。 經(jīng)常有香客問(wèn)我辑甜,道長(zhǎng),這世上最難降的妖魔是什么袍冷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任磷醋,我火速辦了婚禮,結(jié)果婚禮上胡诗,老公的妹妹穿的比我還像新娘邓线。我一直安慰自己,他們只是感情好煌恢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布骇陈。 她就那樣靜靜地躺著,像睡著了一般瑰抵。 火紅的嫁衣襯著肌膚如雪缩歪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,798評(píng)論 1 290
  • 那天谍憔,我揣著相機(jī)與錄音匪蝙,去河邊找鬼。 笑死习贫,一個(gè)胖子當(dāng)著我的面吹牛逛球,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苫昌,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼颤绕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了祟身?” 一聲冷哼從身側(cè)響起奥务,我...
    開(kāi)封第一講書(shū)人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎袜硫,沒(méi)想到半個(gè)月后氯葬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婉陷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年帚称,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秽澳。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闯睹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出担神,到底是詐尸還是另有隱情楼吃,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布妄讯,位于F島的核電站孩锡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捞挥。R本人自食惡果不足惜浮创,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望砌函。 院中可真熱鬧斩披,春花似錦、人聲如沸讹俊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仍劈。三九已至厕倍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贩疙,已是汗流浹背讹弯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工况既, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人组民。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓棒仍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臭胜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莫其,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348