欧美18videos极品massage,中文字幕久久精品一区二区三区 ,性xxxxfreexxxxx欧美,最近国语高清免费观看视频,亚洲一卡2卡三卡4卡乱码

  • 歡迎使用超級(jí)蜘蛛池(CJZZC)網(wǎng)站外鏈優(yōu)化,收藏快捷鍵 CTRL + D

推薦 详解nginx的rewrite应用,Nginx高级之Rewrite规则


Rewrite主要的功能是實(shí)現(xiàn)URL重寫,Nginx 的 Rewrite 規(guī)則采用 PCRE Perl 兼容正則表達(dá)式的語法進(jìn)行規(guī)則匹配,如相使用 Nginx 的 Rewrite 功能,在編譯 Nginx 前要編譯安裝 PCRE 庫。Rewrite主要實(shí)現(xiàn)url地址重寫,以及重定向,就是把傳入web的請(qǐng)求重定向到其他url的過程。

詳解nginx的rewrite應(yīng)用,Nginx高級(jí)之Rewrite規(guī)則

一、rewrite介紹

rewrite和location的功能有點(diǎn)相像,都能實(shí)現(xiàn)跳轉(zhuǎn),主要區(qū)別在于rewrite常用于同一域名內(nèi)更改獲取資源的路徑,而location是對(duì)一類路徑做控制訪問和反向代理,可以proxy_pass到其他服務(wù)器。

Nginx提供的全局變量或自己設(shè)置的變量,結(jié)合正則表達(dá)式和標(biāo)志位實(shí)現(xiàn)url重寫以及重定向。

rewrite只能放在server{},location{},if{}中,

并且只能對(duì)域名后邊的除去傳遞的參數(shù)外的字符串起作用。

二、rewrite作用及應(yīng)用場景

Rewrite主要的功能就是實(shí)現(xiàn)URL的重寫,Nginx的Rewrite規(guī)則采用Pcre,perl兼容正則表達(dá)式的語法規(guī)則匹配,如果需要Nginx的Rewrite功能,在編譯Nginx之前,需要編譯安裝PCRE庫。通過Rewrite規(guī)則,可以實(shí)現(xiàn)規(guī)范的URL、根據(jù)變量來做URL轉(zhuǎn)向及選擇配置。

作用: 實(shí)現(xiàn)對(duì)URL的重寫以及對(duì)匹配(正則表達(dá)式)的url的重定向

場景: 

1. URL訪問跳轉(zhuǎn), 支持開發(fā)設(shè)計(jì)

① 頁面跳轉(zhuǎn)  ② 兼容性支持  ③ 展示效果

2. SEO優(yōu)化

3. 維護(hù)

① 后臺(tái)維護(hù)  ② 流量轉(zhuǎn)發(fā)

4. 安全

① 偽靜態(tài)頁面

配置語法

systax: rewrite [正則表達(dá)式 替換前的URL] [替換后的URL] [標(biāo)識(shí)];

default: 無配置

二、ReWrite相關(guān)指令

指令默認(rèn)值使用范圍作用
breaknoneif,server,location完成當(dāng)前的規(guī)則集,不再處理rewrite指令,需要和last加以區(qū)分
if ( condition ) { … }noneserver,location

用于檢測(cè)一個(gè)條件是否符合,符合則執(zhí)行大括號(hào)內(nèi)的語句。不支持嵌套,不支持多個(gè)條件&&或處理

returnnoneserver,if,location

用于結(jié)束規(guī)則的執(zhí)行和返回狀態(tài)碼給客戶端。狀態(tài)碼的值可以是204,400,402,406,408,410,411,413,416以及500~504,另外非標(biāo)準(zhǔn)狀態(tài)碼444,表示以不發(fā)送任何的Header頭來結(jié)束連接。

rewrite regex replacement flag
server,location,if

該指令根據(jù)表達(dá)式來重定向URI,或者修改字符串。

指令根據(jù)配置文件中的順序來執(zhí)行。注意重寫表達(dá)式只對(duì)相對(duì)路徑有效。該指令根據(jù)表達(dá)式來重定向URI,或者修改字符串。指令根據(jù)配置文件中的順序來執(zhí)行。注意重寫表達(dá)式只對(duì)相對(duì)路徑有效。

uninitialized_variable_warn on/offonhttp,server,location,if該指令用于開啟和關(guān)閉未初始化變量的警告信息,默認(rèn)值為開啟。
set variable valuenone

該指令用于定義一個(gè)變量,并且給變量進(jìn)行賦值。

變量的值可以是文本、一個(gè)變量或者變量和文本的聯(lián)合,文本需要用引號(hào)引起來。

三、rewrite常用全局變量

詳解nginx的rewrite應(yīng)用,Nginx高級(jí)之Rewrite規(guī)則

詳解nginx的rewrite應(yīng)用,Nginx高級(jí)之Rewrite規(guī)則

四、Nginx rewrite語法

1、rewrite指令語法

指令語法: rewrite regex replacement [flag]

默認(rèn)值: none

應(yīng)用位置:server、location、if

rewrite是實(shí)現(xiàn)URL重寫的關(guān)鍵指令,根據(jù)regex(正則表達(dá)式)部分的內(nèi)容,重定向到replacement部分,結(jié)尾是flag標(biāo)記。

下面是一個(gè)簡單地URL rewrite跳轉(zhuǎn)的例子:

    rewrite ^/(.*) http://www.azlx8.cn/$1 permanent;

在上述指令中,rewrite為固定關(guān)鍵字,表示開啟一條rewrite匹配規(guī)則,regex部分是^/(.*),這是一個(gè)正則表達(dá)式,表示匹配所有,匹配成功后跳轉(zhuǎn)到http://www.azlx8.cn/$1。這里的$1是取前面regex部分括號(hào)里的內(nèi)容結(jié)尾的permanent;是永久301重定向標(biāo)記,即跳轉(zhuǎn)到后面的http://www.azlx8.cn/$1地址上。

2、rewrite指令結(jié)尾的flag標(biāo)記說明

flag標(biāo)記符號(hào)說 明
last本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則
break本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則
redirect返回302臨時(shí)重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址
permanent返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址

在以上的flag標(biāo)記中,last和break用來實(shí)現(xiàn)URL重寫,瀏覽器地址欄的URL地址不變,但在服務(wù)器訪問的程序及路徑發(fā)生了變化。redirect和permanent用來實(shí)現(xiàn)URL跳轉(zhuǎn),瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址。

last和break標(biāo)記的實(shí)現(xiàn)功能類似,但二者之間有細(xì)微的差別,使用alias指令時(shí)必須用last標(biāo)記,使用proxy_pass指令時(shí)要使用break標(biāo)記。

last標(biāo)記在本條rewrite規(guī)則執(zhí)行完畢后,會(huì)對(duì)其所在的server{…}標(biāo)簽重新發(fā)起請(qǐng)求,而break標(biāo)記則會(huì)在本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則。

五、例子

1、 break

參數(shù)項(xiàng):break,用于停止執(zhí)行rewrite模塊的指令,但是其他模塊不受影響。

配置位置:server,location,if

示例

    server {
        listen       80;
        server_name  localhost;
        #===== break && rewrite test =====
        #這里如果注釋掉break,所有請(qǐng)求進(jìn)來都是返回http200,this is breaktest...
        break;
        return 200 "this is breaktest...";
        location = /breaktest {
            break;
            return 200 $request_uri;
            proxy_pass http://192.168.88.38/other;
        }
        location / {
            return 200 $request_uri;
        }    
    }
    
    # 發(fā)送請(qǐng)求如下
    # curl 127.0.0.1:8080/testbreak
    # /other
    # 可以看到 返回 `/other` 而不是 `/testbreak`,說明 `proxy_pass` 指令還是被執(zhí)行了
    # 也就是說 其他模塊的指令是不會(huì)被 break 中斷執(zhí)行的
    #(proxy_pass是ngx_http_proxy_module的指令)

測(cè)試鏈接:http://192.168.88.38/breaktest ,請(qǐng)求到達(dá)server塊后,被break終止執(zhí)行rewrite指令集,return屬于rewrite模塊指令集,所以return 200 “this is breaktest…”不會(huì)執(zhí)行;

因?yàn)闆]有返回結(jié)果,所以繼續(xù)執(zhí)行l(wèi)ocation匹配,請(qǐng)求匹配到location = /breaktest{}之后,break終止return 200 $request_uri,而proxy_pass屬于ngx_http_proxy_module,仍會(huì)繼續(xù)執(zhí)行,

反向代理后的新url匹配到location /{},因此最終返回結(jié)果為 http200,/other,如下圖:

詳解nginx的rewrite應(yīng)用,Nginx高級(jí)之Rewrite規(guī)則

2、set

配置位置:server,location,if,用于為變量賦值

示例:

    server {
        listen       80;
        server_name  localhost;
        #===== break && rewrite test =====
        #這里如果注釋掉break,所有請(qǐng)求進(jìn)來都是返回http200,this is breaktest...
        break;
        return 200 "this is breaktest...";
        location = /breaktest {
            break;
            return 200 $request_uri;
            proxy_pass http://192.168.88.38/other;
        }
        location / {
            #set賦值,可以直接賦字符串,或是變量,如下是變量和字符串的組合
            set $set_value_test “112233 $request_uri”;
            return 200 $set_value_test;
        }    
     }

測(cè)試鏈接http://192.168.88.38/breaktest,使用效果如下圖:

在這里插入圖片描述

3.if

配置位置:server,location,用于依據(jù)指定的條件,決定是否執(zhí)行if塊中的語句

判斷條件:

3.1.變量值為空或?yàn)?,都為false;

示例:

    set $if_value_test “0”;
      #注意這里if、()和{}要空格,否則會(huì)報(bào)錯(cuò)..略坑,不過這也是代碼規(guī)范了
      if ($if_value_test) {
         #不會(huì)執(zhí)行,因?yàn)?if_value_test值為0,false
         return 200;
    }

3.2.變量與字符串比較,=為等于,!=為不等

3.3.變量與正則表達(dá)式匹配,~ 為區(qū)分大小寫匹配,~* 為不區(qū)分大小寫匹配,!~ , !~*前面兩者的非操作

示例:

    if ($request_uri ~ “^/breaktest$”) {
      #測(cè)試鏈接http://192.168.88.38/breaktest,最終返回http200
      return 200;
    }

3.4.檢查文件是否存在,-f存在即為true,!-f不存在即為true

3.5.檢查目錄是否存在,-d存在即為true,!-d不存在即為true

3.6.檢查文件或目錄是否存在,-e存在即為true,!-e不存在即為true

3.7.檢查文件是否可執(zhí)行,-x可執(zhí)行即為true,!-x不可執(zhí)行即為true

示例:

    if (-e /usr/local/nginx/conf) {
      return 200;
    }

其他示例:

    if ($http_user_agent ~ MSIE) {
    
        rewrite ^(.*)$ /msie/$1 break;

    } //如果UA包含"MSIE",rewrite請(qǐng)求到/msid/目錄下

    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
   
        set $id $1;
    
    } //如果cookie匹配正則,設(shè)置變量$id等于正則引用部分
      
    if ($request_method = POST) {
    
        return 405;
    
    } //如果提交方法為POST,則返回狀態(tài)405(Method not allowed)。return不能返回301,302
    
    if ($slow) {
        limit_rate 10k;
    
    } //限速,$slow可以通過 set 指令設(shè)置
    
    if (!-f $request_filename){
        break;
        proxy_pass  http://127.0.0.1; 
    } //如果請(qǐng)求的文件名不存在,則反向代理到localhost 。這里的break也是停止rewrite檢查
    
    if ($args ~ post=140){
        rewrite ^ http://mysite.com/ permanent;
    
    } //如果query string中包含"post=140",永久重定向到mysite.com
  1. if指令中,可以使用全局變量,這些變量有:

  2. $ args: #這個(gè)變量等于請(qǐng)求行中的參數(shù),同$query_string

  3. $ content_length: 請(qǐng)求頭中的Content-length字段。

  4. $content_type: 請(qǐng)求頭中的Content-Type字段。

  5. $document_root: 當(dāng)前請(qǐng)求在root指令中指定的值。

  6. $host: 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱。

  7. $http_user_agent: 客戶端agent信息

  8. $http_cookie: 客戶端cookie信息

  9. $limit_rate: 這個(gè)變量可以限制連接速率。

  10. $request_method: 客戶端請(qǐng)求的動(dòng)作,通常為GET或POST。

  11. $remote_addr: 客戶端的IP地址。

  12. $remote_port: 客戶端的端口。

  13. $remote_user: 已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名。

  14. $request_filename: 當(dāng)前請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成。

  15. $scheme: HTTP協(xié)議(如http,https)。

  16. $server_protocol: 請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。

  17. $server_addr: 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值。

  18. $server_name: 服務(wù)器名稱。

  19. $server_port: 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)。

  20. $request_uri: 包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如:”/foo/bar.php?arg=baz”。

  21. $ uri: 不帶請(qǐng)求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”。

  22. $ document_uri: 與$uri相同。

4.return

配置位置:server,location,if

參數(shù)值:return code [text]返回狀態(tài)碼及文本、return url重定向、return code url重定向

5.rewrite

配置位置:server,location,if

參數(shù)值:rewrite regex replacement [flag],用于以正則表達(dá)式匹配特定格式的url并重寫url.

regex為正則表達(dá)式,replacement為重寫的內(nèi)容,flag為rewrite的標(biāo)識(shí)位

replacement:重寫的url帶http,表示重定向

示例:

    location / {    
        #測(cè)試鏈接http://192.168.88.38/test/,被重定向到百度首頁,后面的語句不會(huì)再執(zhí)行
        rewrite /test/(.*) http://www.baidu.com;
        set $set_value_test "112233 $request_uri";
        return 200 $set_value_test;
    }

replacement:重寫的url不帶http,單純的重寫url

示例:

    location / {
       #測(cè)試鏈接http://192.168.88.38/test/,匹配到location /{}后url被重寫為http://192.168.88.38/breaktest,繼續(xù)搜索匹配
       #匹配到location = /breaktest{},最終返回http200及this is breaktest
       rewrite /test/(.*) /breaktest;
    }
    location = /breaktest {
       return 200 "this is breaktest";
    }

6、flag

flag:用于設(shè)置重寫url后的進(jìn)一步操作,有break,last,redirect,permanent,rewrite不帶flag時(shí),多個(gè)rewrite指令順序執(zhí)行,當(dāng)location中沒有可執(zhí)行的rewrite模塊指令時(shí),重新發(fā)起一次location匹配,下面說明各個(gè)flag的用途:

break:和上面講的break用途及用法一樣,終止執(zhí)行rewrite模塊指令集;

last:終止執(zhí)行rewrite模塊指令集,并開始搜尋重寫url后匹配的location;

redirect:臨時(shí)重定向

permanent:永久重定向

示例:

     location / {
        #測(cè)試鏈接http://192.168.88.38/test1,匹配到location / {}
        rewrite ^/test1 /test2;#被重寫為/test2,繼續(xù)往下執(zhí)行rewrite
        rewrite ^/test2 /test3;#被重寫為/test3,往下沒有可執(zhí)行的rewrite模塊指令,發(fā)起一次location匹配,匹配到location /test3 {},最終返回http200及/test3
     }
     location /test2 {
        return 200 "/test2";
     }
     location /test3 {
        return 200 "/test3";
     }

last和break的區(qū)別在于,last會(huì)發(fā)起新的location匹配,而break不會(huì)。

示例:

        location / {
           rewrite ^/test1 /test2;
           rewrite ^/test2 /test3 last;
           rewrite ^/test3 /test4;
        }
        location /test2 {
            return 200 "/test2";
        }
        location /test3 {
            return 200 "/test3";
        }
        location /test4 {
            return 200 "/test4";
        }

測(cè)試鏈接:http://192.168.88.38/test1 匹配到 location / {}后,被重寫為/test2,順序執(zhí)行再次被重寫為/test3,因?yàn)閒lag為last,所以不會(huì)繼續(xù)重寫為/test4,而是發(fā)起一次location匹配,匹配到location /test3{},所以最終返回結(jié)果為http200及/test3;

如果把location /{}中的last改為break,被重寫為/test3后,不再重寫為/test4,也不會(huì)發(fā)起location,最終沒有可匹配的資源,返回http404。

7、正則匹配URL的參數(shù)傳遞

小括號(hào)()之間匹配的內(nèi)容,可以在后面通過 $下標(biāo) 來引用,如1 表 示 引 用 第 一 個(gè) 小 括 號(hào) 匹 配 的 內(nèi) 容 , 1表示引用第一個(gè)小括號(hào)匹配的內(nèi)容,1表示引用第一個(gè)小括號(hào)匹配的內(nèi)容,表示引用第二個(gè)小括號(hào)匹配的內(nèi)容。

示例:

        location / {
           rewrite ^/(test1)/(test2)/(test3) /$2/$3;
           return 200 $2-$3;
        }

最終返回結(jié)果:

在這里插入圖片描述


本文鏈接:http://www.azlx8.cn/article/1082.html

超級(jí)蜘蛛工具

  • 網(wǎng)站鏈接HTTP狀態(tài)批量檢測(cè)_在線批量檢測(cè)網(wǎng)站鏈接狀態(tài)_超級(jí)蜘蛛池
  • 百度關(guān)鍵詞排名查詢_網(wǎng)站關(guān)鍵詞排名批量查詢_超級(jí)蜘蛛池
  • 百度收錄查詢_在線百度收錄批量查詢_超級(jí)蜘蛛池
  • 域名IP地址批量查詢_在線批量查詢網(wǎng)站IP地址_超級(jí)蜘蛛池
  • 超級(jí)外鏈發(fā)布工具_(dá)在線免費(fèi)批量發(fā)布SEO外鏈_超級(jí)蜘蛛池
  • 網(wǎng)頁蜘蛛模擬抓取測(cè)試工具_(dá)超級(jí)蜘蛛工具_(dá)超級(jí)蜘蛛池