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

Nginx 中的Rewrite 使用示例詳解

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

1. 概述

Nginx 的 rewrite 模塊是處理 HTTP 請(qǐng)求過程中的一個(gè)重要功能,它允許基于 Perl 兼容正則表達(dá)式(PCRE)對(duì)用戶請(qǐng)求的 URI 進(jìn)行重寫,并返回 30x 重定向跳轉(zhuǎn)或按條件執(zhí)行相關(guān)配置。這個(gè)模塊提供了靈活的 URL 重寫和重定向功能,可以用于實(shí)現(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í)行臨時(shí) 重定向(302)。
    • permanent:執(zhí)行永久重定向(301)。

2.2 Flag 標(biāo)記說明

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

3. Rewrite 與 Location

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

3.1 Location 分類

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

3.2 Rewrite 和 Location 比較

  • rewrite 用于重寫請(qǐng)求 URI。
  • location 用于定義請(qǐng)求的處理方式。

4. Rewrite 實(shí)際場(chǎng)景

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

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

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

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

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

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

# 定義一個(gè) server 塊,用于處理進(jìn)來的 HTTP 請(qǐng)求
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)碼
            # 并將請(qǐng)求重定向到 /maintenance.html,表示網(wǎng)站正在維護(hù)中
            return 302 /maintenance.html;
        }
    }
}

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

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

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

# 定義一個(gè) server 塊,用于處理進(jìn)來的 HTTP 請(qǐng)求
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é)尾的請(qǐng)求 URI
        rewrite ^/(.*)?param=value$ /new-path/$1 last;
        # last 標(biāo)志表示重寫完成后,繼續(xù)搜索匹配的 location 塊
        # 這里的 $1 是正則表達(dá)式中括號(hào)內(nèi)匹配到的部分,即任意字符的部分
    }
}

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

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

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

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

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

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

將普通 URL 請(qǐng)求重寫到新路徑。

# 定義一個(gè) server 塊,用于處理進(jìn)來的 HTTP 請(qǐng)求
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á)式 ^/(.*)$ 匹配任何以 / 開頭,后面跟著任意字符的請(qǐng)求 URI
        rewrite ^/(.*)$ /new-path/$1 permanent;
        # permanent 標(biāo)志表示這是一個(gè)永久重定向(301 狀態(tài)碼)
        # 告訴瀏覽器和搜索引擎該資源已經(jīng)被永久移動(dòng)到新的位置
        # $1 是正則表達(dá)式中括號(hào)內(nèi)匹配到的部分,即除去第一個(gè)斜杠后的整個(gè)請(qǐng)求路徑
    }
}

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

5. Rewrite 執(zhí)行順序

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

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

6. Rewrite 與 If 指令

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

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

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

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

8. Rewrite 指令的腳本指令

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

9. Rewrite 配置示例

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

9.1 301/302 重定向

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

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

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

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

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

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

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

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

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

10. 結(jié)論

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

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

相關(guān)文章

  • 歐拉部署nginx的實(shí)現(xiàn)步驟

    歐拉部署nginx的實(shí)現(xiàn)步驟

    本文主要介紹了歐拉部署nginx的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Nginx之proxy_redirect使用詳解

    Nginx之proxy_redirect使用詳解

    這篇文章主要介紹了Nginx之proxy_redirect使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Nginx報(bào):Nginx?-?504?Gateway?Time-out問題解決辦法

    Nginx報(bào):Nginx?-?504?Gateway?Time-out問題解決辦法

    這篇文章主要給大家介紹了關(guān)于Nginx報(bào):Nginx?-?504?Gateway?Time-out問題的解決辦法,一般是由于程序執(zhí)行時(shí)間過長(zhǎng)導(dǎo)致響應(yīng)超時(shí),例如程序需要執(zhí)行90秒,而nginx最大響應(yīng)等待時(shí)間為30秒,這樣就會(huì)出現(xiàn)超時(shí),需要的朋友可以參考下
    2024-01-01
  • nginx隱藏server及版本號(hào)的實(shí)現(xiàn)

    nginx隱藏server及版本號(hào)的實(shí)現(xiàn)

    為了提高nginx服務(wù)器的安全性,降低被攻擊的風(fēng)險(xiǎn),需要隱藏nginx的server和版本號(hào),本文就來介紹一下nginx如何隱藏server及版本號(hào),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • window下使用nginx提供文件下載服務(wù)器配置

    window下使用nginx提供文件下載服務(wù)器配置

    這篇文章主要介紹了window下使用nginx提供文件下載服務(wù)器配置,需要的朋友可以參考下
    2017-06-06
  • 解讀Nginx和Apache的特點(diǎn)與區(qū)別

    解讀Nginx和Apache的特點(diǎn)與區(qū)別

    這篇文章主要介紹了解讀Nginx和Apache的特點(diǎn)與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • windows下Nginx多域名簡(jiǎn)單配置教程

    windows下Nginx多域名簡(jiǎn)單配置教程

    這篇文章主要為大家詳細(xì)介紹了windows下Nginx多域名簡(jiǎn)單配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Nginx禁止部分UserAgent訪問的問題解決

    Nginx禁止部分UserAgent訪問的問題解決

    本文主要介紹了使用Nginx禁止特定UserAgent訪問域名,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Nginx配置SSL和WSS步驟介紹

    Nginx配置SSL和WSS步驟介紹

    大家好,本篇文章主要講的是Nginx配置SSL和WSS步驟介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法

    在linux中安裝nginx及在樹莓派ubuntu中安裝nginx的方法

    在進(jìn)行軟件安裝時(shí),若遇到報(bào)錯(cuò),常見的解決方法之一是檢查是否缺失依賴,并嘗試安裝所需的依賴包,記得去掉尖括號(hào),對(duì)于nginx服務(wù)器,配置文件的位置和管理是關(guān)鍵操作之一,通過命令cd進(jìn)入后,使用sudo nano index.nginx-debian.html命令打開并編輯默認(rèn)的html文件
    2024-11-11

最新評(píng)論