網站首頁 編程語言 正文
前言
rewrite功能就是使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標記實現URL重寫以及重定向
例如:更換域名后需要保持舊的域名能夠轉到新的域名上、某網頁發(fā)生改變需要跳轉到新的頁面、網站防盜鏈等等需求
rewrite只能放在server{},location{},if{}中,并且默認只能對域名后面的除去傳遞的參數外的字符串起作用
例如:http://www.xjj.com/a/we/index.php?id=1&u=str 只對/a/we/index.php重寫
一、rewrite跳轉實現
Nginx:通過ngx_http_rewrite_module模塊支持URL重寫、支持if條件判斷,但不支持else
跳轉:從一個location跳轉到另一個location,循環(huán)最多可以執(zhí)行10次,超過后nginx將返回500錯誤
PCRE支持:perl兼容正則表達式的語法規(guī)則匹配
重寫模塊set指令:創(chuàng)建新的變量并為其賦值
二、rewrite執(zhí)行順序
①執(zhí)行server快里面的rewriter指令
②執(zhí)行l(wèi)ocation匹配
③執(zhí)行選定的location中的rewrite指令
三、rewrite跳轉場景
調整用戶瀏覽的URL,看起來更規(guī)范,合乎開發(fā)及產品人員的需求
為了讓搜索引擎搜錄網站內容及用戶體驗更好,企業(yè)會將動態(tài)URL地址偽裝成靜態(tài)地址提供服務
網址換新域名后,讓舊的訪問跳轉到新的域名上;例如,訪問京東的 360buy.com 會跳轉到 jd.com
服務端某些業(yè)務調整,比如根據特殊變量、目錄、客戶端的信息進行URL調整等
四、語法與flg標記說明
語法rewrite
regex:表示正則匹配規(guī)則
replacement:表示跳轉后的內容
flag:表示 rewrite 支持的 flag 標記
flag標記說明:
- last :本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則,一般用在 server 和 if 中
- break :本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則,一般使用在 location 中
- redirect :返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址
- permanent :返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
五、Nginx常用的正則表達式符號?
六、location
1.分類
location大致可以分為以下三類:
- 精準匹配:location = / {…}
- 一般匹配:location / {…}
- 正則匹配:location ~ / {…}
2.常用匹配規(guī)則
3.優(yōu)先級
- 首先精準匹配 =
- 其次前綴匹配 ^~
- 其次是按文件中順序的正則匹配 ~ 或 ~*
- 然后是匹配不帶任何修飾的前綴匹配,即一般匹配
- 最后交給 / 通用匹配,優(yōu)先級最低
?4.示例
?localtion = / {}
=為精準匹配 /,主機名后面不能帶任何字符串,比如訪問 / 和 /xcf,則 / 匹配,/xcf 不匹配
location / {}
因為所有的地址都以 / 開頭,所以這條規(guī)則將匹配到所有的請求,比如訪問 / 和 /data,則 / 匹配,/data也匹配
但若后面是正則表達式,則會和最長字符串優(yōu)先匹配(最長匹配)
location /documents/ {}
匹配任何以 /documents/ 開頭的地址,匹配符合以后,還要繼續(xù)往下搜索其它 location
location /documents/abc {}
匹配任何以 /documents/abc 開頭的地址,匹配符合后,還要繼續(xù)往下搜索其他 location
只有其他 location 后面的正則表達式沒有匹配到時,才會采用這一條
location ^~ /images/ {}
匹配任何以 /images/ 開頭的地址,匹配符合以后,停止往下搜索正則,并采用這條
location ~* .(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg、jpeg 為結尾的請求
然而,所有請求 /images/ 下的圖片會被 location ^~ /images/ 處理,因為 ^~ 的優(yōu)先級更高,所以到達不了這一條正則
location /images/abc {}
最長字符匹配到 /images/abc,優(yōu)先級最低,繼續(xù)往下搜索其它 location,會發(fā)現 ^~ 和 ~ 存在
location ~ /images/abc {}
匹配以 /images/abc 開頭的,優(yōu)先級次之,只有去掉 location ^~ /images 才會采用這一條
location /images/abc/1.html {}
匹配 /images/abc/1.html 文件,如果和正則 ~ /images/abc/1.html 相比,正則優(yōu)先級更高
優(yōu)先級總結:
(location = 完整路徑) > (location ^~ 路徑) > (location ,* 正則順序) > (location 部分起始路徑) > (location /)
5.匹配規(guī)則定義
①第一個必選規(guī)則:
直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,比如說官網
可以是一個靜態(tài)首頁,也可以直接轉發(fā)給后端“應用服務器”——>PHP、Apache(應用服務器如下圖所示)
?
location / { root html; index index.html index.html; }
②第二個必選規(guī)則:
處理靜態(tài)文件請求,這是nginx作為http服務器的強項(①靜態(tài)請求處理的能力②高并發(fā)處理能力③資源消耗較低)
有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
location ^~ /static/ { root /webroot/static/; } location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/ ; }
③第三個必選規(guī)則:
就是通用規(guī)則,比如用來轉發(fā)帶.php、.jsp后綴的動態(tài)請求到后端應用服務器
非靜態(tài)文件請求就默認是動態(tài)請求(跳轉/反向代理)
upstream tomcat_server { 192.168.126.12:80 192.168.126.23:80 }
location / { proxy_ pass http://tomcat_server;
總結:
1.比較rewrite和location
相同點:都實現跳轉
不同點:rewrite是在同一域名內更改獲取資源的路徑
location是對一類路徑做控制訪問或反向代理,還可以proxy_pass到其他機器
2.rewrite會寫在location里,執(zhí)行順序
- 執(zhí)行server塊里面的rewrite指令
- 執(zhí)行l(wèi)ocation匹配
- 執(zhí)行選定的location中的rewrite指令
3.location優(yōu)先級是怎么排列的?
匹配某個具體文件
(location = 完整路徑) > (location ^~ 完整路徑) > (location ~* 完整路徑) > (location ~ 完整路徑)> (location /)
用目錄做匹配訪問某個文件
(location = 目錄) > (location ^~ 目錄) > (location ~ 目錄) > (location ~* 目錄)> (location /)
4.文件、目錄為什么只會在區(qū)不區(qū)分大小寫上會有變動
正則表達式:目的是為了盡量精確的匹配
文件——>盡量精確匹配,區(qū)分大小寫 精確,不區(qū)分更為精確
目錄——>盡量精確匹配,區(qū)分大小寫 更為精確,優(yōu)先級更高
原文鏈接:https://blog.csdn.net/m0_63761361/article/details/123619499
相關推薦
- 2022-04-26 SQL?Server中Sequence對象用法_MsSql
- 2022-03-14 關于VS+QT5應用程序換圖標的解決方案_C 語言
- 2022-07-07 Python?pluggy模塊的用法示例演示_python
- 2022-05-05 Python學習之列表常用方法總結_python
- 2022-07-02 C#并行編程之Task同步機制_C#教程
- 2022-02-23 去除type=“number“輸入框聚焦時的上下箭頭
- 2023-08-01 Antd的Select組件二次封裝
- 2022-05-02 Python+Flask編寫一個簡單的行人檢測API_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支