整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Nginx URL重寫規則配置詳解

          ewrite模塊介紹

          nginx的重寫模塊是一個簡單的正則表達式匹配與一個虛擬堆疊機結合。依賴于PCRE庫,因此需要安裝pcre。根據相關變量重定向和選擇不同的配置,從一個location跳轉到另一個location,不過這樣的循環最多可以執行10次,超過后nginx將返回500錯誤。同時,重寫模塊包含set指令,來創建新的變量并設其值,這在有些情景下非常有用的,如記錄條件標識、傳遞參數到其他location、記錄做了什么等等。

          rewrite模塊指令

          break

          語法:break

          默認值:none

          使用字段:server, location, if

          作用:完成當前設置的重寫規則,停止執行其他的重寫規則。

          if

          語法:if (condition) { … }

          默認值:none

          使用字段:server, location

          注意:盡量考慮使用trp_files代替。

          判斷的條件可以有以下值:

          一個變量的名稱:空字符傳”“或者一些“0”開始的字符串為false。

          字符串比較:使用=或!=運算符

          正則表達式匹配:使用~(區分大小寫)和~(不區分大小寫),取反運算!~ 和!~。

          文件是否存在:使用-f和!-f操作符

          目錄是否存在:使用-d和!-d操作符

          文件、目錄、符號鏈接是否存在:使用-e和!-e操作符

          文件是否可執行:使用-x和!-x操作符

          return

          語法:return code

          默認值:none

          使用字段:server, location, if

          停止處理并為客戶端返回狀態碼。非標準的444狀態碼將關閉連接,不發送任何響應頭。可以使用的狀態碼有:204,400,402-406,408,410, 411, 413, 416與500-504。如果狀態碼附帶文字段落,該文本將被放置在響應主體。相反,如果狀態碼后面是一個URL,該URL將成為location頭補值。沒有狀態碼的URL將被視為一個302狀態碼。

          rewrite

          語法:rewrite regex replacement flag

          默認值:none

          使用字段:server, location, if

          按照相關的正則表達式與字符串修改URI,指令按照在配置文件中出現的順序執行。可以在重寫指令后面添加標記。

          注意:如果替換的字符串以http://開頭,請求將被重定向,并且不再執行多余的rewrite指令。

          尾部的標記(flag)可以是以下的值:

          last – 停止處理重寫模塊指令,之后搜索location與更改后的URI匹配。

          break – 完成重寫指令。

          redirect – 返回302臨時重定向,如果替換字段用http://開頭則被使用。

          permanent – 返回301永久重定向。

          rewrite_log

          語法:rewrite_log on | off

          默認值:rewrite_log off

          使用字段:server, location, if

          變量:無

          啟用時將在error log中記錄notice級別的重寫日志。

          set

          語法:set variable value

          默認值:none

          使用字段:server, location, if

          為給定的變量設置一個特定值。

          uninitialized_variable_warn

          語法:uninitialized_variable_warn on|off

          默認值:uninitialized_variable_warn on

          使用字段:http, server, location, if

          控制是否記錄未初始化變量的警告信息。

          重寫規則組成部分

          第一部分–正則表達式

          可以使用括號來捕獲,后續可以根據位置來將其引用,位置變量值取決于捕獲正則表達式中的順序,引用第一個括號中的值,引用第二個括號中的值,以此類推。如:

          ^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$

          # 是兩個小寫字母組成的字符串

          # 是由小寫字母和0到9的數字組成的5個字符的字符串

          # 將是個文件名

          # 是png、jpg、gif中的其中一個。

          第二部分–URI

          請求被改寫。該URI可能包含正則表達式中的捕獲的位置參數或這個級別下的nginx任何配置變量。如:

          /data?file=.

          如果這個URI不匹配nginx配置的任何location,那么將給客戶端返回301(永久重定向)或302(臨時重定向)的狀態碼來表示重定向類型。該狀態碼可以通過第三個參數來明確指定。

          第三部分–標記

          第三部分也就是尾部的標記(flag)。 last標記將導致重寫后的URI搜索匹配nginx的其他location,最多可循環10次。如:

          rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=. last;

          break指令可以當做自身指令。如:

          if ($bwhog) {

          limit_rate 300k;

          break;

          }

          ginx 的 rewrite 語法

          語法: rewrite regex replacement flag

          默認: none

          作用域: server, location, if

          此指令根據表達式來更改URI,或修改字符串。

          指令根據配置文件中的順序來執行。

          注意:

          重寫表達式只對相對路徑有效。如果想配對主機名,應該使用if語句。

          rewrite只是會改寫路徑部分的東東,不會改動用戶的輸入參數,因此這里的if規則里面,你無需關心用戶在瀏覽器里輸入的參數,rewrite后會自動添加的,因此,只是加上了一個?號和后面我們想要的一個小小的參數 ***https=1就可以了。

          nginx的rewrite規則參考:

          ~ 為區分大小寫匹配

          ~* 為不區分大小寫匹配

          !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹

          -f和!-f用來判斷是否存在文件

          -d和!-d用來判斷是否存在目錄

          -e和!-e用來判斷是否存在文件或目錄

          -x和!-x用來判斷文件是否可執行

          last 相當于Apache里的[L]標記,表示完成rewrite,呵呵這應該是最常用的

          break 終止匹配, 不再匹配后面的規則

          redirect 返回302臨時重定向 地址欄會顯示跳轉后的地址

          permanent 返回301永久重定向 地址欄會顯示跳轉后的地址

          $args

          $content_length

          $content_type

          $document_root

          $document_uri

          $host

          $http_user_agent

          $http_cookie

          $limit_rate

          $request_body_file

          $request_method

          $remote_addr

          $remote_port

          $remote_user

          $request_filename

          $request_uri

          $query_string

          $scheme

          $server_protocol

          $server_addr

          $server_name

          $server_port

          $uri

          結合QeePHP的例子:

          復制代碼代碼示例:

          if (!-d $request_filename) {

          rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=&action=& last;

          rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller= last;

          break;

          多目錄轉成參數

          復制代碼代碼示例:

          abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

          if ($host ~* (.*)\.domain\.com) {

          set $sub_name ;

          rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id= last;

          }

          認IIS是不提供URL重寫模塊的。請注意,不要將IIS默認的HTTP重定向理解為url重寫。

          安裝url重寫模塊

          url重寫,是要從iis的應用市場下載url重寫組件才可以的。

          URL重寫工具的下載地址: 64位版本 32位版本

          設置規則

          比如我樣實現訪問www.demo.com/1.aspx自動跳到新地址www.demo.com/1

          規則設置如下:



          在配置了url重寫組件的IIS中,可以直接操作web.config

          如下圖:

          代碼:

              <system.webServer>        <rewrite>            <rules>                <rule name="test" stopProcessing="true">                    <match url="shop/(.*).aspx" />                    <action type="Redirect" url="/shop/{R:1}" />                    <conditions>                    </conditions>                </rule>            </rules>        </rewrite>    </system.webServer>

          動態跳轉實例

          那如果要加動態頁面怎么辦???莫慌,莫慌,看下圖:原鏈接:http://en.amusechina.cn/en/ProductDetail-2.0.aspx?proId=1159&cateId=99現鏈接:http://en.amusechina.cn/product1159/99.html

          三個實例

          1、http重定向至https

          填寫內容 ->

          名稱:隨意

          模式:(.*) ;代表全部,任意,無論是否字符都匹配

          條件:{HTTPS};https,模式^OFF$,代表https關閉,也就是沒有;;;{HTTP_HOST}:填寫要匹配的域名,不能其他的域名訪問到也重定向至這個https,邏輯分組全部匹配,任意匹配是滿足一個條件即可進行下面處理

          操作類型:重定向

          重定向URL:https://www.example.com/{R:1}

          結果相當于 訪問 http://www.example.com/……. 重定向至 https://www.example.com/…….

          2、重寫服務,一般使用為nodejs服務需要實現路徑轉為根節點訪問,這里不寫條件,一般條件使用為上面的兩種,這里為了截圖方便,不予展示

          模式:^blog/(.*)

          類型:重寫

          目標URL:http://127.0.0.1:3001/{R:1}

          結果:訪問:http://www.example.com/blog/index.html —> http://127.0.0.1:3001/inde.html

          當然這個127.0.0.1指的是服務器的本地,而不是訪問者電腦本地,這樣使用,可以防止開發太多端口,引起安全問題

          3、重寫服務-文件

          模式:(.*)phpf$:代表訪問的文件以phpf結尾

          類型:重寫

          目標URL:http://www.example.com/{R:1}.php

          結果:訪問:http://www.example.com/dir/loginphpf —> http://www.example.com/dir/login.php

          這樣當后端有其他語言或者不想在前端顯示文件后綴時,可以使用這種方式來進行隱藏,phpf可以自己隨意更改


          主站蜘蛛池模板: 亚洲综合无码精品一区二区三区| 国产成人免费一区二区三区| 波多野结衣久久一区二区| 国产乱码伦精品一区二区三区麻豆 | 一区二区传媒有限公司| 久久一区不卡中文字幕| 国产午夜精品一区二区三区 | 在线视频国产一区| 国产精品亚洲一区二区无码| 日本v片免费一区二区三区| 国产小仙女视频一区二区三区| 亚洲码欧美码一区二区三区| 亚洲一区二区三区国产精华液| 亚洲av乱码一区二区三区按摩| 国产未成女一区二区三区| 日本精品一区二区久久久| 一区二区三区免费视频网站| 亚洲日韩精品一区二区三区| 国产视频一区在线观看| 99热门精品一区二区三区无码| 日本人的色道www免费一区| 人妻无码一区二区三区| 人妻AV一区二区三区精品| 精品国产日韩一区三区| 成人影片一区免费观看| 精品香蕉一区二区三区| 夜色阁亚洲一区二区三区| 国产精品丝袜一区二区三区 | 中文字幕视频一区| 一区 二区 三区 中文字幕| 91香蕉福利一区二区三区| 波多野结衣av高清一区二区三区| 久久青草精品一区二区三区| 国产精品无码一区二区三区毛片| 国精品无码一区二区三区在线| 在线精品日韩一区二区三区| 亚洲第一区视频在线观看| 精品国产免费一区二区三区香蕉| 国产一区二区在线观看视频| 一区二区三区在线观看| 日韩在线不卡免费视频一区|