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

Nginx 中的Rewrite 使用示例詳解

 更新時間:2025年11月07日 10:17:17   作者:q***6532  
Nginx的rewrite模塊提供了強(qiáng)大的URL重寫和重定向功能,可以用于實現(xiàn)各種復(fù)雜的 URL 處理需求,本文詳細(xì)介紹了rewrite的命令、語法、含義、環(huán)境和示例,希望能夠幫助用戶更好地理解和使用Nginx的 rewrite功能,感興趣的朋友跟隨小編一起看看吧

1. 概述

Nginx 的 rewrite 模塊是處理 HTTP 請求過程中的一個重要功能,它允許基于 Perl 兼容正則表達(dá)式(PCRE)對用戶請求的 URI 進(jìn)行重寫,并返回 30x 重定向跳轉(zhuǎn)或按條件執(zhí)行相關(guān)配置。這個模塊提供了靈活的 URL 重寫和重定向功能,可以用于實現(xiàn)友好 URL、301/302 重定向、條件重寫等。

2. Rewrite 指令

2.1 指令語法

Nginx 中的 URL 重寫主要依賴于 rewrite 指令,其基本語法如下:

rewrite <regex> <replacement> [flag];
  • regex:用于匹配 URI 的正則表達(dá)式。
  • replacement:將匹配到的 URI 替換成的新 URI。
  • flag(可選):控制重寫的行為,常見的標(biāo)志有:
    • last:表示重新搜索新的 location 塊(即繼續(xù)匹配新的規(guī)則)。
    • break:停止當(dāng)前 location 塊中的規(guī)則匹配,執(zhí)行后續(xù)指令。
    • redirect:執(zhí)行臨時 重定向(302)。
    • permanent:執(zhí)行永久重定向(301)。

2.2 Flag 標(biāo)記說明

  • last:重寫請求并繼續(xù)搜索 location 匹配。
  • break:重寫請求并停止搜索 location 匹配。
  • redirect:返回 302 臨時重定向。
  • permanent:返回 301 永久重定向。

3. Rewrite 與 Location

rewrite 指令可以在 serverlocation 塊中配置。location 塊只對域名后除去傳遞參數(shù)的字符串起作用,而 rewrite 可以對域名或參數(shù)字符串進(jìn)行匹配和重寫。

3.1 Location 分類

  • 普通 location:匹配特定路徑。
  • 正則 location:使用正則表達(dá)式匹配路徑。
  • 優(yōu)先級:Nginx 會優(yōu)先匹配帶有正則表達(dá)式的 location,然后是最長非正則 location。

3.2 Rewrite 和 Location 比較

  • rewrite 用于重寫請求 URI。
  • location 用于定義請求的處理方式。

4. Rewrite 實際場景

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

將舊域名的訪問重定向到新域名,同時保持參數(shù)不變。

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 olddomain.com
    server_name olddomain.com;
    # 定義 location 塊,匹配所有 URI(/ 表示根路徑)
    location / {
        # 使用 rewrite 指令將所有請求從 olddomain.com 重定向到 newdomain.com
        # 并保持原有的請求路徑和查詢參數(shù)不變
        rewrite ^/(.*)$ http://newdomain.com/$1 permanent;
    }
}

這段配置的作用是將所有訪問 olddomain.com 的請求通過 Nginx 重定向到 newdomain.com,并且保持請求的路徑不變。permanent 標(biāo)志表示這是一個永久重定向(301 狀態(tài)碼),告訴搜索引擎和瀏覽器該資源已經(jīng)被永久移動到新的位置。

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

只允許特定 IP 訪問,其他 IP 重定向到維護(hù)頁面。

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 example.com
    server_name example.com;
    # 定義 location 塊,匹配所有 URI(/ 表示根路徑)
    location / {
        # 使用 if 指令進(jìn)行條件判斷,$remote_addr 是客戶端的 IP 地址
        if ($remote_addr != '192.168.1.100') {
            # 如果客戶端 IP 地址不是 '192.168.1.100',則返回 302 狀態(tài)碼
            # 并將請求重定向到 /maintenance.html,表示網(wǎng)站正在維護(hù)中
            return 302 /maintenance.html;
        }
    }
}

這段配置的作用是限制對 example.com 的訪問,只允許 IP 地址為 192.168.1.100 的客戶端訪問所有資源,其他所有 IP 地址的訪問都會被重定向到 /maintenance.html 頁面,通常用于網(wǎng)站維護(hù)期間。這里使用的是臨時重定向(302 狀態(tài)碼),意味著瀏覽器會顯示新的 URL(即 /maintenance.html),但搜索引擎和緩存可能會保留原始請求的 URL。

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

根據(jù)請求參數(shù)進(jìn)行跳轉(zhuǎn)。

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 example.com
    server_name example.com;
    # 定義 location 塊,匹配所有 URI(/ 表示根路徑)
    location / {
        # 使用 rewrite 指令進(jìn)行 URL 重寫
        # 正則表達(dá)式 ^/(.*)?param=value$ 匹配任何以 / 開頭,后面跟著任意字符
        # 并且以 ?param=value 結(jié)尾的請求 URI
        rewrite ^/(.*)?param=value$ /new-path/$1 last;
        # last 標(biāo)志表示重寫完成后,繼續(xù)搜索匹配的 location 塊
        # 這里的 $1 是正則表達(dá)式中括號內(nèi)匹配到的部分,即任意字符的部分
    }
}

這段配置的作用是將所有匹配特定模式的請求重寫到一個新的路徑。具體來說,它會查找所有以 / 開頭,后面跟著任意內(nèi)容,并且以 ?param=value 結(jié)尾的請求,并將這些請求重寫到 /new-path/ 開頭的路徑下,同時保留原始請求中的路徑部分(不包括查詢參數(shù))。last 標(biāo)志意味著在重寫后,Nginx 將繼續(xù)檢查其他 location 塊以找到最合適的匹配項。

4.4 基于目錄下所有 PHP 文件跳轉(zhuǎn)

將特定目錄下的所有 PHP 文件請求重寫到新路徑。

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 example.com
    server_name example.com;
    # 定義一個 location 塊,使用 ~ 表示這是一個正則表達(dá)式匹配
    # 正則表達(dá)式 .php$ 匹配以 .php 結(jié)尾的請求 URI
    location ~ .php$ {
        # 使用 rewrite 指令進(jìn)行 URL 重寫
        # 正則表達(dá)式 ^/(.*).php$ 匹配任何以 / 開頭,后面跟著任意字符,以 .php 結(jié)尾的請求 URI
        rewrite ^/(.*).php$ /new-path/$1.php last;
        # last 標(biāo)志表示重寫完成后,繼續(xù)搜索匹配的 location 塊
        # 這里的 $1 是正則表達(dá)式中括號內(nèi)匹配到的部分,即除去 .php 后綴的文件名部分
    }
}

這段配置的作用是將所有請求 URI 以 .php 結(jié)尾的請求重寫到 /new-path/ 下的相同文件名。例如,請求 /example.com/about.php 會被重寫為 /example.com/new-path/about.php。last 標(biāo)志意味著在重寫后,Nginx 將繼續(xù)檢查其他 location 塊以找到最合適的匹配項,而不是立即停止處理當(dāng)前 location 塊。

4.5 基于最普通 URL 請求的跳轉(zhuǎn)

將普通 URL 請求重寫到新路徑。

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 example.com
    server_name example.com;
    # 定義 location 塊,匹配所有 URI(/ 表示根路徑)
    location / {
        # 使用 rewrite 指令進(jìn)行 URL 重寫
        # 正則表達(dá)式 ^/(.*)$ 匹配任何以 / 開頭,后面跟著任意字符的請求 URI
        rewrite ^/(.*)$ /new-path/$1 permanent;
        # permanent 標(biāo)志表示這是一個永久重定向(301 狀態(tài)碼)
        # 告訴瀏覽器和搜索引擎該資源已經(jīng)被永久移動到新的位置
        # $1 是正則表達(dá)式中括號內(nèi)匹配到的部分,即除去第一個斜杠后的整個請求路徑
    }
}

這段配置的作用是將所有訪問 example.com 的請求重定向到 /new-path/ 下的相同路徑。例如,請求 /example.com/about 會被永久重定向到 /example.com/new-path/about。permanent 標(biāo)志意味著這是一個永久重定向,瀏覽器會更新收藏夾中的 URL,搜索引擎也會更新其索引。

5. Rewrite 執(zhí)行順序

rewrite 指令的執(zhí)行順序如下:

  1. 執(zhí)行 server 塊里面的 rewrite 指令。
  2. 執(zhí)行 location 匹配。
  3. 執(zhí)行選定 location 中的 rewrite 指令。

6. Rewrite 與 If 指令

if 指令用于條件判斷,可以與 rewrite 結(jié)合使用,但需要注意 if 是邪惡的,因為它可能導(dǎo)致 Nginx 配置變得復(fù)雜和難以維護(hù)。推薦使用 rewrite 來實現(xiàn)條件重寫。

7. Rewrite 正則表達(dá)式

Nginx 的 rewrite 模塊支持 PCRE 正則表達(dá)式,以下是一些常用的正則表達(dá)式元字符:

  • .:匹配任意單個字符。
  • ^:匹配字符串的開始。
  • $:匹配字符串的結(jié)束。
  • *:匹配前面的元素 0 次或多次。
  • +:匹配前面的元素 1 次或多次。
  • ?:匹配前面的元素 0 次或 1 次。
  • []:匹配括號內(nèi)的任意一個字符。
  • |:邏輯或操作符。

8. Rewrite 指令的腳本指令

rewrite 模塊提供了類似腳本語言的指令,可以在 HTTP 請求處理過程中對 URI 進(jìn)行更靈活的操作控制。

9. Rewrite 配置示例

以下是一些 rewrite 配置的示例:

9.1 301/302 重定向

# 定義一個 server 塊,用于處理 HTTP 請求
server {
    # 監(jiān)聽 80 端口,這是 HTTP 協(xié)議的默認(rèn)端口
    listen 80;
    # 指定 server 塊服務(wù)的域名,這里是 olddomain.com
    server_name olddomain.com;
    # 定義 location 塊,用于匹配所有請求的 URI(/ 表示根路徑)
    location / {
        # 使用 rewrite 指令進(jìn)行 URL 重寫
        # 正則表達(dá)式 ^/(.*)$ 匹配所有以 / 開頭的請求 URI
        rewrite ^/(.*)$ http://newdomain.com/$1 permanent;
        # 將匹配到的請求重寫到 newdomain.com 的相同路徑
        # $1 表示正則表達(dá)式中括號內(nèi)匹配到的部分,即除了根斜杠外的路徑部分
        # permanent 標(biāo)志表示這是一個永久重定向(301 狀態(tài)碼)
        # 告訴瀏覽器和搜索引擎該資源已經(jīng)被永久移動到新域名
    }
}

這段配置的作用是將所有訪問 olddomain.com 的請求永久重定向到 newdomain.com 的相同路徑。例如,如果用戶訪問 olddomain.com/about,他們將被重定向到 newdomain.com/about。這個重定向是永久的,意味著搜索引擎和瀏覽器會更新相應(yīng)的鏈接,并且用戶瀏覽器的地址欄也會顯示新的 URL。

9.2 非 www 域名重定向到 www 域名

# 第一個 server 塊,用于處理對 example.com 的非 www 前綴域名的請求
server {
    # 監(jiān)聽 80 端口,這是 HTTP 協(xié)議的默認(rèn)端口
    listen 80;
    # 指定 server 塊服務(wù)的域名,這里是 example.com(沒有 www 前綴)
    server_name example.com;
    # 對于所有請求,返回一個 301 永久重定向響應(yīng)
    # 這會將用戶從 http://example.com 重定向到 http://www.example.com,并保留原始請求的 URI
    return 301 http://www.example.com$request_uri;
}
# 第二個 server 塊,用于處理對 www.example.com 的請求
server {
    # 監(jiān)聽 80 端口,這是 HTTP 協(xié)議的默認(rèn)端口
    listen 80;
    # 指定 server 塊服務(wù)的域名,這里是 www.example.com(帶有 www 前綴)
    server_name www.example.com;
    # 定義 location 塊,用于匹配所有請求的 URI(/ 表示根路徑)
    location / {
        # 這里可以放置處理 www.example.com 域名請求的配置
        # 例如,可以配置 proxy_pass 來代理請求,或者 root 指令來指定文件根目錄等
        # 正常站點配置
    }
}

這段配置的作用是將所有對 example.com(沒有 www 前綴)的 HTTP 請求永久重定向到 www.example.com(帶有 www 前綴)。第一個 server 塊監(jiān)聽 example.com 并返回一個 301 狀態(tài)碼,將請求重定向到 www.example.com,同時保留請求的 URI。第二個 server 塊則處理對 www.example.com 的請求,可以在這里進(jìn)行進(jìn)一步的配置,比如設(shè)置代理、靜態(tài)文件服務(wù)等。

關(guān)于您提到的網(wǎng)址 http://www.example.com$request_uri,由于網(wǎng)絡(luò)原因,解析并沒有成功。這可能是由于鏈接格式不正確或者網(wǎng)絡(luò)連接問題。請檢查網(wǎng)頁鏈接的合法性,并在確保網(wǎng)絡(luò)連接正常的情況下適當(dāng)重試。如果問題依舊存在,可能需要進(jìn)一步的網(wǎng)絡(luò)診斷或聯(lián)系網(wǎng)站管理員。如果您有其他問題或需要幫助,請隨時告知。

9.3 URL 正則重寫:簡化 URL 結(jié)構(gòu)

# 定義一個 server 塊,用于處理進(jìn)來的 HTTP 請求
server {
    # 監(jiān)聽 80 端口,即 HTTP 默認(rèn)端口
    listen 80;
    # 指定該 server 塊響應(yīng)的域名,這里是 example.com
    server_name example.com;
    # 定義一個 location 塊,匹配請求 URI 路徑以 /category/id/ 開頭的請求
    location /category/id/ {
        # 使用 rewrite 指令進(jìn)行 URL 重寫
        # 正則表達(dá)式 ^/category/id/(d+)$ 匹配以 /category/id/ 開頭,接著是數(shù)字的請求 URI
        rewrite ^/category/id/(d+)$ /category/$1 last;
        # last 標(biāo)志表示重寫完成后,繼續(xù)搜索匹配的 location 塊
        # $1 是正則表達(dá)式中括號內(nèi)匹配到的部分,即 URI 中的數(shù)字部分
    }
}

這段配置的作用是將所有匹配 /category/id/ 路徑并且后面跟著數(shù)字的請求重寫到 /category/ 路徑下。例如,請求 /category/id/123 會被重寫為 /category/123。last 標(biāo)志意味著在重寫后,Nginx 將繼續(xù)檢查其他 location 塊以找到最合適的匹配項。這樣做可以允許 Nginx 在重寫請求后,根據(jù)新的 URI 再次檢查是否有更具體的 location 匹配,從而應(yīng)用更具體的配置。

10. 結(jié)論

Nginx 的 rewrite 模塊提供了強(qiáng)大的 URL 重寫和重定向功能,可以用于實現(xiàn)各種復(fù)雜的 URL 處理需求。通過合理配置 rewrite 指令,可以提高網(wǎng)站的可用性、改善 SEO、實現(xiàn)域名遷移等。本手冊詳細(xì)介紹了 rewrite 的命令、語法、含義、環(huán)境和示例,希望能夠幫助用戶更好地理解和使用 Nginx 的 rewrite 功能。

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

相關(guān)文章

  • Linux安裝Nginx步驟詳解

    Linux安裝Nginx步驟詳解

    這篇文章主要介紹了Linux安裝Nginx步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Nginx搭建負(fù)載均衡集群的實現(xiàn)

    Nginx搭建負(fù)載均衡集群的實現(xiàn)

    這篇文章主要介紹了Nginx搭建負(fù)載均衡集群的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • nginx緩存及錯誤頁面配置

    nginx緩存及錯誤頁面配置

    這篇文章主要介紹了nginx緩存及錯誤頁面配置的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Nginx配置React項目Url后直接輸入路由路徑時報404問題的解決

    Nginx配置React項目Url后直接輸入路由路徑時報404問題的解決

    這篇文章主要給大家介紹了關(guān)于Nginx配置React項目Url后面直接輸入路由路徑時報404問題的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 前端異常502?bad?gateway的原因和解決辦法

    前端異常502?bad?gateway的原因和解決辦法

    本文詳細(xì)講解了前端異常502?bad?gateway的原因和解決辦法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2021-12-12
  • 簡介Nginx中的location匹配規(guī)則

    簡介Nginx中的location匹配規(guī)則

    這篇文章主要介紹了簡介Nginx中的location匹配規(guī)則,Nginx是一個高速的基于事務(wù)的非阻塞服務(wù)器,需要的朋友可以參考下
    2015-07-07
  • nginx修改server信息的方法詳解

    nginx修改server信息的方法詳解

    請求響應(yīng)信息會暴露nginx版本信息,若攻擊者獲知服務(wù)器組件等信息及版本信息,會使下一步的攻擊和漏洞測試提供便利,所以本文給大家介紹了nginx修改server信息的方法,需要的朋友可以參考下
    2025-02-02
  • Nginx配置之實現(xiàn)多臺服務(wù)器負(fù)載均衡

    Nginx配置之實現(xiàn)多臺服務(wù)器負(fù)載均衡

    這篇文章主要介紹了Nginx配置之實現(xiàn)多臺服務(wù)器負(fù)載均衡,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 使用Nginx中自帶的模塊配置縮略圖功能的教程

    使用Nginx中自帶的模塊配置縮略圖功能的教程

    Nginx的http_image_filter_module模塊可以用來處理縮略圖,這里我們就來看看使用Nginx中自帶的模塊配置縮略圖功能的教程,需要的朋友可以參考下
    2016-06-06
  • nginx如何開通gzip壓縮傳輸文件

    nginx如何開通gzip壓縮傳輸文件

    Gzip壓縮是一種有效提升網(wǎng)站性能的方法,通過減少傳輸數(shù)據(jù)量和提高傳輸速度,Nginx服務(wù)器支持Gzip壓縮,適合壓縮HTML、CSS、JavaScript、JSON和XML等文本文件,配置中需設(shè)置gzip_types指定壓縮文件類型,gzip_comp_level設(shè)置壓縮級別
    2024-09-09

最新評論

寻甸| 塔河县| 增城市| 濉溪县| 多伦县| 高密市| 电白县| 会宁县| 沅陵县| 达日县| 育儿| 迭部县| 巴马| 平泉县| 玉树县| 攀枝花市| 平陆县| 沈阳市| 多伦县| 湟中县| 娱乐| 兴安县| 丹寨县| 平江县| 沈丘县| 和林格尔县| 黎城县| 左贡县| 建湖县| 苏尼特右旗| 义乌市| 永清县| 壤塘县| 绥棱县| 南涧| 郑州市| 托克托县| 峨边| 浦城县| 通化市| 潢川县|