欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx之rewrite重寫的具體使用

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

一、rewrite概述

1、rewrite功能

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

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

2、跳轉(zhuǎn)場景

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

  • 可以調(diào)整用戶瀏覽的 URL,看起來更規(guī)范,合乎開發(fā)及產(chǎn)品人員的需求
  • 為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗(yàn)更好,企業(yè)會(huì)將動(dòng)態(tài) URL 地址偽裝成靜態(tài)地址提供服務(wù)
  • 網(wǎng)址換新域名后,讓舊的訪問跳轉(zhuǎ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
指令說明當(dāng)指令值為 on 時(shí),rewrite 的執(zhí)行結(jié)果會(huì)以 notice 級別記錄到 Nginx 的 error 日志文件中

配置樣例如下:

http {
   rewrite_log off;
}

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

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

配置樣例如下:

http {
    uninitialized_variable_warn off;
}

3、rewrite 指令

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

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

配置樣例如下:

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

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

rewrite regex replacement [flag];

注意:

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

2) replacement 是重寫 URI 的改寫規(guī)則。當(dāng)改寫規(guī)則以"http://""https://"或"$scheme"開頭時(shí),Nginx 重寫該語句后將停止執(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)址仍為請求時(shí)的 URI;
  • permanent:返回響應(yīng)狀態(tài)碼 301 的永久重定向,返回內(nèi)容是重定向 URI 的內(nèi)容,瀏覽器網(wǎng)址變?yōu)橹囟ㄏ虻?URI。

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

3.1 正則表達(dá)式

符號功能描述
匹配除換行符以外的任意字符
\w匹配字母或數(shù)字或下劃線或漢字
\s匹配任意的空白符
\d匹配數(shù)字    [0-9]   
\b匹配單詞的開始或結(jié)束
^匹配字付串的開始
$匹配字符串的結(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匹配不是單詞開頭或結(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全局變量,代表請求主機(jī)頭字段或主機(jī)名
			rewrite ^/(.*)$ http://www.xin.com/$1 permanent;		
    #$1為正則匹配的內(nèi)容,即域名后邊的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}

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

#創(chuàng)建日志文件夾,檢查語法
mkdir -p /var/log/nginx
nginx -t
 
#創(chuàng)建網(wǎng)頁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àn)證 

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

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

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

第一步:修改主配置文件

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ù)頁面
    if ($rewrite = true){						#當(dāng)變量值為true時(shí),進(jìn)行重寫
        rewrite (.+) /weihu.html;				#重寫在訪問IP后邊插入/weihu.html,例如192.168.80.11/weihu.html
    }
    location = /weihu.html {
        root /var/www/html;						#網(wǎng)頁返回/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àn)證 

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

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

現(xiàn)在訪問的是 http://mail.jiu.com/post,現(xiàn)在需要將這個(gè)域名下面的訪問都跳轉(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)頁文件

[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)

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

第一步:修改主配置文件

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;
    }
}

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

nginx -t
systemctl restart nginx

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

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

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

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

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

第一步:修改主配置文件

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;
    }
}

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

nginx -t
systemctl restart nginx

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

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

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

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

第一步:修改主配置文件

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

第三步:瀏覽器中訪問測試

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

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

相關(guān)文章

  • 教你nginx跳轉(zhuǎn)配置的四種方式

    教你nginx跳轉(zhuǎn)配置的四種方式

    現(xiàn)如今隨著應(yīng)用服務(wù)的增多,服務(wù)可能部署在不同的服務(wù)器上,下面這篇文章主要給大家介紹了關(guān)于nginx跳轉(zhuǎn)配置的四種方式,需要的朋友可以參考下
    2022-07-07
  • nginx虛擬主機(jī)配置實(shí)例詳解

    nginx虛擬主機(jī)配置實(shí)例詳解

    這篇文章主要介紹了nginx虛擬主機(jī)配置實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • nginx安裝(1) ttlsa教程系列之nginx

    nginx安裝(1) ttlsa教程系列之nginx

    今年抽出時(shí)間完成平時(shí)工作上用到的nginx的一些小結(jié)這里先介紹下nginx的安裝方法,需要的朋友可以參考下
    2014-03-03
  • Nginx配置跨域請求Access-Control-Allow-Origin * 詳解

    Nginx配置跨域請求Access-Control-Allow-Origin * 詳解

    這篇文章主要給大家介紹了關(guān)于Nginx配置跨域請求Access-Control-Allow-Origin * 的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明

    Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明

    本文總結(jié)了Nginx配置中的location匹配規(guī)則和proxy_pass用法,包括前綴匹配、精確匹配、正則表達(dá)式匹配、通配符匹配以及proxy_pass的配置細(xì)節(jié)
    2024-12-12
  • 一文帶你搞懂Nginx如何處理請求

    一文帶你搞懂Nginx如何處理請求

    Nginx(Engine?X)是一個(gè)高性能的HTTP和反向代理服務(wù)器,本文將從原理、代碼以及示例來深入分析?Nginx如何處理請求,希望對大家有所幫助
    2024-11-11
  • 深入分析nginx+php-fpm服務(wù)HTTP狀態(tài)碼502

    深入分析nginx+php-fpm服務(wù)HTTP狀態(tài)碼502

    這篇文章主要介紹了深入分析nginx+php-fpm服務(wù)HTTP狀態(tài)碼502,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • nginx安裝完成無法解析php解決方法

    nginx安裝完成無法解析php解決方法

    大家好,本篇文章主要講的是nginx安裝完成無法解析php解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Nginx緩存Cache的配置方案以及相關(guān)內(nèi)存占用問題解決

    Nginx緩存Cache的配置方案以及相關(guān)內(nèi)存占用問題解決

    這篇文章主要介紹了Nginx緩存Cache的配置方案以及相關(guān)內(nèi)存占用問題解決,Cashe配置最主要的還是需要注意內(nèi)存資源的使用問題,需要的朋友可以參考下
    2016-01-01
  • nginx?流控使用的項(xiàng)目實(shí)踐

    nginx?流控使用的項(xiàng)目實(shí)踐

    本文主要介紹了nginx?流控使用的項(xiàng)目實(shí)踐
    2024-03-03

最新評論