Nginx location匹配及Rewrite重寫
(1)location = / {}
=為精確匹配 / ,主機名後面不能帶任何字串,比如訪問 / 和 /data,則 / 匹配,/data 不匹配
再比如 location = /abc,則只匹配/abc ,/abc/或 /abcd不匹配。若 location /abc,則即匹配/abc 、/abcd/ 同時也匹配 /abc/。
(2)location / {}
因為所有的地址都以 / 開頭,所以這條規則將匹配到所有請求 比如訪問 / 和 /data, 則 / 匹配, /data 也匹配,
但若後面是正規表示式會和最長字串優先匹配(最長匹配)
(3)location /documents/ {}
匹配任何以 /documents/ 開頭的地址,匹配符合以後,還要繼續往下搜尋其它 location
只有其它 location後面的正規表示式沒有匹配到時,才會採用這一條
(4)location /documents/abc {}
匹配任何以 /documents/abc 開頭的地址,匹配符合以後,還要繼續往下搜尋其它 location
只有其它 location後面的正規表示式沒有匹配到時,才會採用這一條
(5)location ^~ /images/ {}
匹配任何以 /images/ 開頭的地址,匹配符合以後,停止往下搜尋正則,採用這一條
(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg或jpeg 結尾的請求
然而,所有請求 /images/ 下的圖片會被 location ^~ /images/ 處理,因為 ^~ 的優先順序更高,所以到達不了這一條正則
(7)location /images/abc {}
最長字元匹配到 /images/abc,優先順序最低,繼續往下搜尋其它 location,會發現 ^~ 和 ~ 存在
(8)location ~ /images/abc {}
匹配以/images/abc 開頭的,優先順序次之,只有去掉 location ^~ /images/ 才會採用這一條
(9)location /images/abc/1.html {}
匹配/images/abc/1.html 檔案,如果和正則 ~ /images/abc/1.html 相比,正則優先順序更高
三、rewrite
Ⅰ、介紹
rewrite功能就是,使用nginx提供的全域性變數或自己設定的變數,結合正規表示式和標記位實現URL重寫以及重定向。
比如:更換域名後需要保持舊的域名能跳轉到新的域名上、某網頁發生改變需要跳轉到新的頁面、網站防盜鏈等等需求。
rewrite只能放在server{ ) ,location } ,if{ }中,並且預設只能對域名後邊的除去傳遞的引數外的字串起作用,
例如http:// www . kac.com/abc/bbs/index.php?a=1&b=2只對/abc/bbs/index.php重寫。
Ⅱ、rewrite跳轉場景
調整使用者瀏覽的URL,看起來更規範,合乎開發及產品人員的需求。
為了讓搜尋引擎搜錄網站內容及使用者體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。
網址換新域名後,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com 會跳轉到 jd.com。
服務端某些業務調整,比如根據特殊變數、目錄、客戶端的資訊進行URL調整等。
Ⅲ、跳轉實現
Nginx:透過ngx _http_rewrite_module模組支援URL重寫、支援if條件判斷,但不支援else
跳轉:從一個location跳轉到另一個location,迴圈最多可以執行10次,超過後nginx將返回500錯誤
PCRE支援: perl相容正規表示式的語法規則匹配
重寫模組set指令:建立新的變數並設其值
Ⅳ、執行順序
執行server塊裡面的rewrite指令。
執行location匹配。
執行選定的location中的rewrite指令。
格式:
rewrite <regex> <replacement> [ flag] ;
#regex :表示正則匹配規則。 #replacement :表示跳轉後的內容。 #flag :表示rewrite支援的flag標記。
1.
2.
3.
flag標記說明 作用
last 本條規則匹配完成後,繼續向下匹配新的location URI規則,一般用在 server 和 if 中。
break 本條規則匹配完成即終止,不再匹配後面的任何規則,一般使用在 location 中
redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent 返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址
Ⅴ、實際場景
基於域名跳轉
現在公司舊域名有業務需求變更,需要使用新域名代替,但是舊域名不能廢除,需要跳轉新域名上,而且後面的引數保持不變。
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name ; #域名修改
charset utf-8;
access_log /var/log/nginx/.access.log; #日誌修改
location / {
#新增域名重定向
if ($host = ''){ #$host為rewrite全域性變數,代表請求主機頭欄位或主機名
rewrite ^/(.*)$ http:///$1 permanent; #$1為正則匹配的內容,即域名後邊的字串
}
root html;
index index.html index.htm;
}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mkdir -p /var/log/ngin #巢狀建立nginx目錄
systemctl restart nginx.service
echo "192.168.239.10 " >> /etc/hosts
systemctl restart nginx.service #重啟nginx服務
1.
2.
3.
4.
基於客戶端IP訪問跳轉
今天公司業務新版本上線,要求所有IP訪問任何內容都顯示一個固定維護頁面,只有IP:192.168.239.10訪問正常
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name ; #域名修改
charset utf-8;
access_log /var/log/nginx/-access.log main; #日誌修改
#設定是否合法的IP標記
set $rewrite true; #設定變數$rewrite,變數值為boole值true
#判斷是否為合法IP
if ($remote_addr = "192.168.184.10"){ #當客戶端IP為192.168.184.10時,將變數值設為false,不進行重寫
set $rewrite false;
}
#除了合法IP,其它都是非法IP,進行重寫跳轉維護頁面
if ($rewrite = true){ #當變數值為true時,進行重寫
rewrite (.+) /weihu.html; #重寫在訪問IP後邊插入/weihu.html,例如192.168.184.11/weihu.html
}
location = /weihu.html {
root /var/www/html; #網頁返回/var/www/html/weihu.html的內容
}
location / {
root html;
index index.html index.htm;
Nginx中location匹配及rewrite重寫
目錄一、常用的Nginx正規表示式二、location2.1、location三類匹配型別2.2、常用的匹配規則2.3、location優先順序2.3.1、舉例說明2.4、實際網站使用中,至少有三個匹配規則定義2.4.1、第一個必選規則2.4.2...
Nginx的location匹配與rewrite重寫跳轉
# Nginx的location匹配與rewrite重寫跳轉## 常用的Nginx正規表示式| 正規表示式 | 介紹 || :---------: | :--------------------------------------...
nginx location匹配及rewrite規則
location匹配規則1. 例項 server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } location ^~ /static/{ ...
Nginx中的location匹配與rewrite重寫跳轉(八)
# 常見的Nginx正規表示式~~~^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字元一次或多次。如“ol+”能匹配...
Web之Nginx中的location匹配與rewrite重寫跳轉
@[toc](目錄## 一、常見的Nginx正規表示式- 正則之前的部落格中也有寫到,這裡在提一下,很重要。```^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配...
web服務之Nginx中的location匹配與rewrite重寫跳轉
# 一、常見的Nginx正規表示式- 正則之前的部落格中也有寫到,這裡在提一下,很重要。```shell^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及...
Nginx Rewrite跳轉與Location匹配規則
常用的Nginx正規表示式字元涵義以及示例^ 匹配輸入字串的起始位置$ 匹配輸入字串的結束位置* 匹配前面的字元零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字元一次或多次;如“o...
Nginx Rewrite 與 Location 的網頁匹配
# Nginx Rewrite 與 Location 的網頁匹配## 1、常見的Nginx正規表示式```^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+...
Nginx自學手冊(三)location匹配,rewrite
(一)Nginx location(一)Nginx Location location語法規則Syntax:location [ = | ~ | ~* | ^~ ] uri { ... }location @name&nbs...
Nginx之正規表示式、location匹配簡介以及rewrite重寫
一、常見的Nginx正規表示式^ :匹配輸入字串的起始位置$ :匹配輸入字串的結束位置* :匹配前面的字元零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字元一次或多次。如“ol+”能匹配...
Nginx Location配置總結及rewrite
參考來源: http://blog.zol.com.cn/1067/article_1066186.html,http://flandycheng.blog.51cto.com/855176/280121語法規則: location [=|~|~*|^~] /uri/ { … }= 開頭表示精確匹配^~ ...
nginx 重寫 rewrite 基礎及例項
nginx rewrite 正規表示式匹配大小寫匹配~ 為區分大小寫匹配 ~* 為不區分大小寫匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 檔案及目錄匹配-f和!-f用來判斷是否存在檔案 -d和!-d用...
Nginx Rewrite(重寫)
# Nginx Rewrite(重寫)```==常用的Nginx正規表示式==^:匹配輸入字串的起始位置$:匹配輸入字串的結束位置*:匹配前面的字元零次或多次。如“o1*" 能匹配"o”及“ol”、“oll”+ :匹配前面的字元一次或多...
Nginx Rewrite(重寫)
1.常用的Nginx正規表示式^ : 匹配輸入字串的起始位置$ : 匹配輸入,字串的結束位置* : 匹配前面的字元零次或多次。如“o1*” 能匹配“o”及“ol”、“oll”+ : 匹配前面的字元一次或多次。如“o1+" 能匹配“ol"...
基於Nginx Rewrite 與 Location 的網頁匹配 跳轉
一、常用的Nginx 正規表示式字元涵義以及示例^ 匹配輸入字串的起始位置$ 匹配輸入字串的結束位置* 匹配前面的字元零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字元一次或多次;...
nginx配置 location及rewrite規則詳解
location正則寫法語法規則:location [=|~|~*|^~] /uri/ { … }= 開頭表示精確匹配^~ 開頭表示uri以某個常規字串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以...
Nginx Rewrite與Location
Nginx Rewrite與Location一、常用的Nginx正規表示式1、正則表達^∶匹配輸入字串的起始位置$ ∶匹配輸入字串的結束位置*∶匹配前面的字元零次或多次。如"ol*"能匹配"o"及"ol"、"oll"+ ∶匹配前面的字元一...
Nginx location&rewrite
Nginx的Location可以有以下幾個匹配:1. = 嚴格匹配這個查詢。如果找到,停止搜尋。 2. ^~ 匹配路徑的字首,如果找到,停止搜尋。3. ~ 為區分大小寫的正則匹配 4. ~* 為不區分...
nginx 重寫 rewrite 基礎及例項(轉)
nginx rewrite 正規表示式匹配大小寫匹配~ 為區分大小寫匹配 ~* 為不區分大小寫匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 檔案及目錄匹配-f和!-f用來判斷是否存在檔案 -d和!-d用來判斷是否存在目...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22198239/viewspace-2868738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nginx location匹配及rewrite規則Nginx
- nginx配置location總結及rewrite規則寫法Nginx
- nginx之rewrite匹配需求Nginx
- nginx location匹配規則Nginx
- Nginx Location 路徑匹配Nginx
- 徹底弄懂 Nginx location 匹配Nginx
- 07 nginx Location之正則匹配Nginx
- 一文弄懂Nginx的location匹配Nginx
- nginx的location 規則匹配練習Nginx
- 談Nginx的Location匹配優先順序Nginx
- nginx負載均衡(5種方式)、rewrite重寫規則及多server反代配置梳理Nginx負載Server
- Rewrite重寫教程前言
- 理解Nginx中Server和Location的匹配邏輯NginxServer
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- nginx rewriteNginx
- Nginx RewriteNginx
- nginx locationNginx
- nginx執行請求的工作原理之location匹配詳解Nginx
- 解決Nginx中location匹配不到末尾不加斜槓的URLNginx
- ASP.NET URL Rewrite. URL重寫ASP.NET
- nginx location指令Nginx
- Nginx Location 配置Nginx
- nginx location配置Nginx
- nginx url重寫Nginx
- Nginx 重寫URINginx
- Nginx配置指令location匹配符優先順序和安全問題Nginx
- Nginx rewrite 詳解Nginx
- .htaccess技巧: URL重寫(Rewrite)與重定向(Redirect)
- nginx location 的配置Nginx
- 使用ISAPI_REWRITE限定主機頭做重寫API
- nginx rewrite語法格式Nginx
- nginx thinkphp rewrite配置項NginxPHP
- Nginx Rewrite規則初探Nginx
- nginx的rewrite設定Nginx
- nginx高階篇rewriteNginx
- nginx location匹配後proxy_pass給後端server後404 一探Nginx後端Server
- nginx的location優化Nginx優化
- Nginx Location配置總結Nginx