最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx之rewrite重寫的具體使用

 更新時(shí)間:2024年05月11日 10:13:04   作者:小藝要禿頭  
訪問(wèn)重寫rewrite是Nginx HTTP請(qǐng)求處理過(guò)程中的一個(gè)重要功能,本文主要介紹了Nginx之rewrite重寫的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下

一、rewrite概述

1、rewrite功能

訪問(wèn)重寫 rewrite 是 Nginx HTTP 請(qǐng)求處理過(guò)程中的一個(gè)重要功能,它是以模塊的形式存在于代碼中的,其功能是對(duì)用戶請(qǐng)求的 URI 進(jìn)行 PCRE 正則重寫,然后返回 30× 重定向跳轉(zhuǎn)或按條件執(zhí)行相關(guān)配置。

Nginx服務(wù)器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請(qǐng)求,此功能依靠 PCRE(perl compatible regular expression),因此編譯之前要安裝PCRE庫(kù),rewrite是nginx服務(wù)器的重要功能之一,用于實(shí)現(xiàn)URL的重寫,URL的重寫是非常有用的功能,比如它可以在我們改變網(wǎng)站結(jié)構(gòu)之后,不需要客戶端修改原來(lái)的書簽,也無(wú)需其他網(wǎng)站修改我們的鏈接,就可以設(shè)置為自動(dòng)訪問(wèn),另外還可以在一定程度上提高網(wǎng)站的安全性。

2、跳轉(zhuǎn)場(chǎng)景

Rewrite 跳轉(zhuǎn)場(chǎng)景主要包括以下幾種

  • 可以調(diào)整用戶瀏覽的 URL,看起來(lái)更規(guī)范,合乎開(kāi)發(fā)及產(chǎn)品人員的需求
  • 為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗(yàn)更好,企業(yè)會(huì)將動(dòng)態(tài) URL 地址偽裝成靜態(tài)地址提供服務(wù)
  • 網(wǎng)址換新域名后,讓舊的訪問(wèn)跳轉(zhuǎn)到新的域名上。例如,訪問(wèn)京東的 360buy.com會(huì)跳轉(zhuǎn)到 jd.com
  • 根據(jù)特殊變量、目錄、客戶端的信息進(jìn)行 URL 調(diào)整等。

二、標(biāo)準(zhǔn)配置指令

1、rewrite日志記錄指令

名稱rewrite 日志記錄指令
指令rewrite_log
作用域http, server, location
默認(rèn)值off
指令值選項(xiàng)on 或 off
指令說(shuō)明當(dāng)指令值為 on 時(shí),rewrite 的執(zhí)行結(jié)果會(huì)以 notice 級(jí)別記錄到 Nginx 的 error 日志文件中

配置樣例如下:

http {
   rewrite_log off;
}

2、未初始化變量告警日志記錄指令

名稱 未初始化變量告警日志記錄指令
指令uninitialized_variable_warn
作用域http, server, location
默認(rèn)值on
指令值選項(xiàng)on 或 off
指令說(shuō)明指令值為 on 時(shí),會(huì)將未初始化的變量告警記錄到日志中

配置樣例如下:

http {
    uninitialized_variable_warn off;
}

3、rewrite 指令

通過(guò)正則表達(dá)式的匹配來(lái)改變URI,可以同時(shí)存在一個(gè)或多個(gè)指令,按照順序依次對(duì)URI進(jìn)行匹配,rewrite主要是針對(duì)用戶請(qǐng)求的URL或者是URI做具體處理

名稱rewrite 指令
指令rewrite
作用域server, location,if
默認(rèn)值on
指令值選項(xiàng)on 或 off
指令說(shuō)明對(duì)用戶的 URI 用正則表達(dá)式的方式進(jìn)行重寫,并跳轉(zhuǎn)到新的 URI

配置樣例如下:

http {
    rewrite ^/users/(.*)$ /show?user=$1 last;
}

rewrite 訪問(wèn)重寫是通過(guò) rewrite 指令實(shí)現(xiàn)的,rewrite 指令的語(yǔ)法格式如下:

rewrite regex replacement [flag];

注意:

1) regex 是 PCRE 語(yǔ)法格式的正則表達(dá)式。

2) replacement 是重寫 URI 的改寫規(guī)則。當(dāng)改寫規(guī)則以"http://""https://"或"$scheme"開(kāi)頭時(shí),Nginx 重寫該語(yǔ)句后將停止執(zhí)行后續(xù)任務(wù),并將改寫后的 URI 跳轉(zhuǎn)返回客戶端。

3) flag 是執(zhí)行該條重寫指令后的操作控制符。操作控制符有如下 4 種:

  • last:執(zhí)行完當(dāng)前重寫規(guī)則跳轉(zhuǎn)到新的 URI 后繼續(xù)執(zhí)行后續(xù)操作;
  • break:執(zhí)行完當(dāng)前重寫規(guī)則跳轉(zhuǎn)到新的 URI 后不再執(zhí)行后續(xù)操作。不影響用戶瀏覽器 URI 顯示;
  • redirect:返回響應(yīng)狀態(tài)碼 302 的臨時(shí)重定向,返回內(nèi)容是重定向 URI 的內(nèi)容,但瀏覽器網(wǎng)址仍為請(qǐng)求時(shí)的 URI;
  • permanent:返回響應(yīng)狀態(tài)碼 301 的永久重定向,返回內(nèi)容是重定向 URI 的內(nèi)容,瀏覽器網(wǎng)址變?yōu)橹囟ㄏ虻?URI。

rewrite將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查,匹配到時(shí)將其替換為表達(dá)式指定的新的URI。如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自下而下逐個(gè)檢查;被某條件規(guī)則替換完成后,會(huì)重新一輪的替換檢查,隱含有循環(huán)機(jī)制,但不超過(guò)10次;如果超過(guò),提示500響應(yīng)碼,[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制如果替換后的URL是以http://或https://開(kāi)頭,則替換結(jié)果會(huì)直接以重定向返回給客戶端, 即永久重定向 301。

3.1 正則表達(dá)式

符號(hào)功能描述
匹配除換行符以外的任意字符
\w匹配字母或數(shù)字或下劃線或漢字
\s匹配任意的空白符
\d匹配數(shù)字    [0-9]   
\b匹配單詞的開(kāi)始或結(jié)束
^匹配字付串的開(kāi)始
$匹配字符串的結(jié)束
*匹配重復(fù)零次或更多次
+匹配重復(fù)一次或更多次
?匹配重復(fù)零次或一次
(n)匹配重復(fù)n次
{n,}匹配重復(fù)n次或更多次
{n,m}匹配重復(fù)n到m次
*?匹配重復(fù)任意次,但盡可能少重復(fù)
+? 匹配重復(fù)1次或更多次,但盡可能少重復(fù)
?? 匹配重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}?匹配重復(fù)n到m次,但盡可能少重復(fù)
{n,}?匹配重復(fù)n次以上,但盡可能少重復(fù)
\W匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S匹配任意不是空白符的字符
\D匹配任意非數(shù)字的字符
\B匹配不是單詞開(kāi)頭或結(jié)束的位置
[^x]匹配除了x以外的任意字符
[^kgc]匹配除了kgc 這幾個(gè)字母以外的任意字符

三、rewrite模塊使用實(shí)例

1.基于域名的跳轉(zhuǎn)

現(xiàn)在公司舊域名www.jiu.com有業(yè)務(wù)需求變更,需要使用新域名www.xin.com代替,但是舊域名不能廢除,需要跳轉(zhuǎn)到新域名上,而且后面的參數(shù)保持不變。

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.jiu.com;										
    #域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.jiu.com-access.log;		        
    #日志修改
	location / {													
    #添加域名重定向
        if ($host = 'www.jiu.com'){									
    #$host為rewrite全局變量,代表請(qǐng)求主機(jī)頭字段或主機(jī)名
			rewrite ^/(.*)$ http://www.xin.com/$1 permanent;		
    #$1為正則匹配的內(nèi)容,即域名后邊的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}

第二步:創(chuàng)建所需目錄與文件 

#創(chuàng)建日志文件夾,檢查語(yǔ)法
mkdir -p /var/log/nginx
nginx -t
 
#創(chuàng)建網(wǎng)頁(yè)test目錄與文件1.html
mkdir -p /usr/local/nginx/html/test
vim /usr/local/nginx/html/test/1.html
------------------------------------------
<h1 font color=red>
Here is the content of test
<img src="1.jpg"/>
</h1
-------------------------------------------
 
#上傳1.jpg圖片文件
cd /usr/local/nginx/html/test
rz -E

 第三步:添加域名與IP地址映射關(guān)系

第四步:網(wǎng)頁(yè)驗(yàn)證 

#打開(kāi)瀏覽器輸入
www.jiu.com/test/1.html
 
會(huì)發(fā)現(xiàn)重定向到www.xin.com/test/1.html

2.基于客戶端 IP 訪問(wèn)跳轉(zhuǎn)

公司業(yè)務(wù)新版本上線,要求所有 IP 訪問(wèn)任何內(nèi)容都顯示一個(gè)固定維護(hù)頁(yè)面,只有公司 IP :192.168.79.210訪問(wèn)正常。

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
--------------------------------------------------------------
server {
	listen       80;
	server_name  www.weihu.com;
	#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.kgc.com-access.log;				#日志修改
 
	#設(shè)置是否合法的IP標(biāo)記
    set $rewrite true;							#設(shè)置變量$rewrite,變量值為boole值true
    #判斷是否為合法IP
	if ($remote_addr = "192.168.80.111"){		#當(dāng)客戶端IP為192.168.80.111時(shí),將變量值設(shè)為false,不進(jìn)行重寫
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,進(jìn)行重寫跳轉(zhuǎn)維護(hù)頁(yè)面
    if ($rewrite = true){						#當(dāng)變量值為true時(shí),進(jìn)行重寫
        rewrite (.+) /weihu.html;				#重寫在訪問(wèn)IP后邊插入/weihu.html,例如192.168.80.11/weihu.html
    }
    location = /weihu.html {
        root /var/www/html;						#網(wǎng)頁(yè)返回/var/www/html/weihu.html的內(nèi)容
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

第二步:設(shè)置維護(hù)界面并重啟服務(wù)

mkdir -p /var/www/html/
vim /var/www/html/weihu.html
-----------------------------------
<h1>
Sorry!
We are busy now!
See you tomorrow!
</h1>
-----------------------------------
 
systemctl restart nginx

第三步:網(wǎng)頁(yè)驗(yàn)證 

#本機(jī)網(wǎng)頁(yè)瀏覽器輸入
www.weihu.com
訪問(wèn)應(yīng)正常
 
#在其他設(shè)備瀏覽器訪問(wèn)測(cè)試首先修改映射文件
echo "192.168.80.111 www.weihu.com" >>/etc/hosts
 
#瀏覽器測(cè)試
www.weihu.com

3. 基于舊域名跳轉(zhuǎn)到新域名后面加目錄

現(xiàn)在訪問(wèn)的是 http://mail.jiu.com/post,現(xiàn)在需要將這個(gè)域名下面的訪問(wèn)都跳轉(zhuǎn)到http://www.jiu.com/

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
-------------------------------------
server {
	listen       80;
	server_name  www.jiu.com;									#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/pc03-access.log;
	#添加
	location /post {
        rewrite (.+) http://www.jiu.com/mail$1 permanent;		#這里的$1為位置變量,代表/post
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

第二步:添加臨時(shí)域名和IP的映射關(guān)系

vim /etc/hosts
--------------
192.168.80.111 www.jiu.com mail.jiu.com

 第三步:創(chuàng)建準(zhǔn)備的網(wǎng)頁(yè)文件

[root@localhost conf.d]#mkdir -p /apps/nginx/html/post/
[root@localhost conf.d]#echo "this is 1.html" >> /apps/nginx/html/post/1.html
[root@localhost conf.d]#systemctl restart nginx

第四步:瀏覽器驗(yàn)證

輸入mail.jiu.com/post/1.html
顯示為www.jiu.com/post/1.html

4.基于參數(shù)匹配的跳轉(zhuǎn)

訪問(wèn)http://www.jiu.com/100-(100|200)-100.html 跳轉(zhuǎn)到http://www.jiu.com頁(yè)面。

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
--------------------------------------
server {
	listen       80;
	server_name  www.pc04.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.pc04.com-access.log;
	
	if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
        rewrite (.*) http://www.pc04.com permanent;
    }
 
	location / {
        root   html;
        index  index.html index.htm;
    }
}

第二步:檢查語(yǔ)法并重啟服務(wù)

nginx -t
systemctl restart nginx

 第三步:網(wǎng)頁(yè)驗(yàn)證

#在瀏覽器輸入
www.pc04.com/100-200-100.html

#在瀏覽器輸入錯(cuò)誤范圍
www.jiu.com/100-500-100.html

5.基于目錄下所有 php 結(jié)尾的文件跳轉(zhuǎn)

要求訪問(wèn) http://www.kgc.com/upload/123.php 跳轉(zhuǎn)到首頁(yè)。

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
------------------------------------
server {
	listen       80;
	server_name  www.pc05.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.pc05.com-access.log;
	
	location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.pc05.com permanent;
    }
 
	location / {
        root   html;
        index  index.html index.htm;
    }
}

第二步:檢查語(yǔ)法并重啟服務(wù)

nginx -t
systemctl restart nginx

第三步:網(wǎng)頁(yè)驗(yàn)證

#在瀏覽器輸入
www.pc05.com/upload/123.php

6.基于最普通一條 url 請(qǐng)求的跳轉(zhuǎn)

要求訪問(wèn)一個(gè)具體的頁(yè)面如 http://www.kgc.com/abc/123.html 跳轉(zhuǎn)到首頁(yè)

第一步:修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
----------------------------------------
server {
	listen       80;
	server_name  www.pc06.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.pc06.com-access.log  main;
	
    location ~* ^/abc/123.html {
        rewrite (.+) http://www.pc06.com permanent;
    }
 
	location / {
        root   html;
        index  index.html index.htm;
    }
}

第二步:檢查配置文件并且重啟服務(wù)

nginx -t
systemctl restart nginx

第三步:瀏覽器中訪問(wèn)測(cè)試

#在瀏覽器輸入
www.pc06.com/abc/123.html

到此這篇關(guān)于Nginx之rewrite重寫的具體使用的文章就介紹到這了,更多相關(guān)Nginx rewrite重寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • web部署到nginx以后js,css等靜態(tài)文件加載不正常的解決過(guò)程

    web部署到nginx以后js,css等靜態(tài)文件加載不正常的解決過(guò)程

    在Ubuntu中配置Web頁(yè)面時(shí),JS和CSS文件雖可獲取但加載失敗,可能因路徑錯(cuò)誤、服務(wù)器配置不當(dāng)、權(quán)限限制或緩存問(wèn)題導(dǎo)致頁(yè)面布局異常,需檢查文件路徑、服務(wù)器設(shè)置、MIME類型及瀏覽器控制臺(tái)錯(cuò)誤信息以排查原因
    2025-09-09
  • Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache是一個(gè)模型化的服務(wù)器,可以運(yùn)行在幾乎所有的服務(wù)器上。其屬于應(yīng)用服務(wù)器,這篇文章主要介紹了Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式,需要的朋友可以參考下
    2023-11-11
  • Nginx 多站點(diǎn)配置實(shí)例詳解

    Nginx 多站點(diǎn)配置實(shí)例詳解

    這篇文章主要介紹了Nginx 多站點(diǎn)配置實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Nginx生產(chǎn)環(huán)境平滑升級(jí)的實(shí)現(xiàn)

    Nginx生產(chǎn)環(huán)境平滑升級(jí)的實(shí)現(xiàn)

    本文主要介紹了Nginx生產(chǎn)環(huán)境平滑升級(jí)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Nginx實(shí)現(xiàn)精準(zhǔn)IP訪問(wèn)控制的方法全攻略

    Nginx實(shí)現(xiàn)精準(zhǔn)IP訪問(wèn)控制的方法全攻略

    在日常服務(wù)器運(yùn)維、前后端聯(lián)調(diào)、測(cè)試環(huán)境部署中,精準(zhǔn)控制訪問(wèn)權(quán)限是高頻且核心的需求,Nginx?作為當(dāng)下最流行的?Web?服務(wù)器和反向代理工具,本文將從基礎(chǔ)用法入手,結(jié)合實(shí)際測(cè)試場(chǎng)景,拆解?Nginx?IP?訪問(wèn)控制的核心指令、實(shí)用技巧、常見(jiàn)坑點(diǎn),需要的朋友可以參考下
    2026-03-03
  • nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法

    nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法

    這篇文章主要介紹了nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Nginx部署項(xiàng)目上傳文件報(bào)錯(cuò)413的解決方法

    Nginx部署項(xiàng)目上傳文件報(bào)錯(cuò)413的解決方法

    本文主要介紹了Nginx部署項(xiàng)目上傳文件報(bào)錯(cuò)413的解決方法,報(bào)錯(cuò)413是因?yàn)镹ginx對(duì)上傳大小做了限制,所以我們需要配置文件,下面就來(lái)解決這個(gè)問(wèn)題,感興趣的可以了解一下
    2024-03-03
  • Linux搭建Nginx反向代理服務(wù)器的實(shí)戰(zhàn)指南

    Linux搭建Nginx反向代理服務(wù)器的實(shí)戰(zhàn)指南

    在現(xiàn)代Web架構(gòu)中,Nginx作為高性能的反向代理服務(wù)器,早已成為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的重要組成部分,本篇博客將從零開(kāi)始,帶你一步步在Linux系統(tǒng)上搭建一個(gè)完整的 Nginx 反向代理環(huán)境,并結(jié)合Java后端服務(wù)進(jìn)行實(shí)際演示,需要的朋友可以參考下
    2026-04-04
  • Nginx+Tomcat配置https的實(shí)現(xiàn)

    Nginx+Tomcat配置https的實(shí)現(xiàn)

    本文主要介紹了Nginx+Tomcat配置https的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 詳解Nginx SSL快速雙向認(rèn)證配置(腳本)

    詳解Nginx SSL快速雙向認(rèn)證配置(腳本)

    這篇文章主要介紹了詳解Nginx SSL快速雙向認(rèn)證配置(腳本),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

岳阳县| 行唐县| 汉中市| 耿马| 门头沟区| 岳西县| 磐安县| 临江市| 历史| 新乐市| 贵港市| 德惠市| 甘肃省| 周口市| 康乐县| 德保县| 石柱| 黄梅县| 乌恰县| 大田县| 米林县| 邵阳市| 横山县| 漳州市| 武清区| 永兴县| 马关县| 米脂县| 乌什县| 南平市| 木兰县| 宜丰县| 乡城县| 阳山县| 桃源县| 松滋市| 兖州市| 新丰县| 东乡县| 东乌珠穆沁旗| 贵州省|