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

在Nginx中實(shí)現(xiàn)URL重寫與重定向

 更新時(shí)間:2025年01月16日 09:06:09   作者:薛偉同學(xué)  
Nginx 的 **URL 重寫(Rewrite)**功能允許你根據(jù)請(qǐng)求的 URL 動(dòng)態(tài)地修改請(qǐng)求路徑或進(jìn)行重定向,本文將詳細(xì)介紹如何在 Nginx 中實(shí)現(xiàn) URL 重寫,并給出一些常見的實(shí)際場(chǎng)景,需要的朋友可以參考下

URL 重寫(Rewrite)

Nginx 的 **URL 重寫(Rewrite)**功能允許你根據(jù)請(qǐng)求的 URL 動(dòng)態(tài)地修改請(qǐng)求路徑或進(jìn)行重定向。通過 URL 重寫,你可以實(shí)現(xiàn)諸如:

  • 友好 URL:將復(fù)雜的 URL 轉(zhuǎn)換為簡(jiǎn)潔、易記的形式。
  • 301/302 重定向:實(shí)現(xiàn)頁面永久或臨時(shí)重定向。
  • 條件重寫:基于不同的條件(如請(qǐng)求頭、IP 地址、用戶代理等)修改請(qǐng)求路徑。

本文將詳細(xì)介紹如何在 Nginx 中實(shí)現(xiàn) URL 重寫,并給出一些常見的實(shí)際場(chǎng)景。

Nginx 中的 URL 重寫指令

Nginx 中的 URL 重寫主要依賴于兩個(gè)指令:

  • rewrite:用于修改請(qǐng)求的 URL。
  • try_files:嘗試一系列的文件路徑,并在文件不存在時(shí)重寫 URL。

rewrite 指令

rewrite 指令允許你根據(jù)正則表達(dá)式重寫 URL。其基本語法如下:

rewrite <匹配規(guī)則> <重寫目標(biāo)> [標(biāo)志];
  • 匹配規(guī)則:正則表達(dá)式,匹配請(qǐng)求的 URL。

  • 重寫目標(biāo):新的 URL,符合規(guī)則時(shí),Nginx 會(huì)將請(qǐng)求的 URL 重寫為這個(gè)目標(biāo)。

  • 標(biāo)志(可選):控制重寫的行為,常見的標(biāo)志有:

    • last:表示重新搜索新的 location 塊(即繼續(xù)匹配新的規(guī)則)。

    • break:停止當(dāng)前 location 塊中的規(guī)則匹配,執(zhí)行后續(xù)指令。

    • redirect:執(zhí)行臨時(shí)重定向(302)。

    • permanent:執(zhí)行永久重定向(301)。

這里舉個(gè)例子:

rewrite ^/archive/(\d{4})/(\d{2})/(\d{2})$ /archive?year=$1&month=$2&day=$3 last;

可以分解為:

  • ^/archive/(\d{4})/(\d{2})/(\d{2})$:這是一個(gè)正則表達(dá)式,表示匹配 /archive/ 后跟著年份、月份和日期的 URL。具體匹配:
    • ^ 表示匹配 URL 的開始;
    • /archive/ 是固定的路徑部分;
    • (\d{4}) 匹配 4 位數(shù)字(年份);
    • (\d{2}) 匹配 2 位數(shù)字(月份);
    • (\d{2}) 匹配 2 位數(shù)字(日期);
    • $ 表示匹配 URL 的結(jié)尾。
  • /archive?year=$1&month=$2&day=$3:這是重寫后的目標(biāo) URL。這里使用了捕獲組的替換:
    • $1 被替換為第一個(gè)捕獲組(即年份)。
    • $2 被替換為第二個(gè)捕獲組(即月份)。
    • $3 被替換為第三個(gè)捕獲組(即日期)。
    • 最終重寫的 URL 是 /archive?year=2024&month=03&day=25
  • last:這個(gè)標(biāo)志表示 Nginx 會(huì)停止當(dāng)前的 rewrite 匹配,并繼續(xù)重新匹配請(qǐng)求的新 URL(即 /archive?year=2024&month=03&day=25)。

首先來看這部分正則表達(dá)式:(\d{4})/(\d{2})/(\d{2})。

  • (\d{4})
    • \d 是一個(gè)正則表達(dá)式元字符,表示匹配 數(shù)字字符,即 0-9 的任意數(shù)字。
    • {4} 是量詞,表示前面的表達(dá)式(這里是 \d)必須出現(xiàn) 4 次
    • 因此,(\d{4}) 匹配 4 位數(shù)字,通常用來表示年份(比如 2024)。
  • /(\d{2})
    • 同理,(\d{2}) 匹配 2 位數(shù)字,通常用來表示月份(如 03)或日期(如 25)。
    • 這里的 \d{2} 匹配的是 2 個(gè)數(shù)字,表示月份或日期。
  • /(\d{2})
    • 這個(gè)部分與上面相同,匹配的是 2 位數(shù)字,通常表示日期部分。

綜合起來:

(\d{4})/(\d{2})/(\d{2}) 就是用來匹配像 /2024/03/25 這樣的 URL,具體來說:

  • 第一部分 (\d{4}) 匹配年份部分(例如 2024)。
  • 第二部分 (\d{2}) 匹配月份部分(例如 03)。
  • 第三部分 (\d{2}) 匹配日期部分(例如 25)。

() 作用:

括號(hào) () 用來 捕獲匹配的內(nèi)容。捕獲的內(nèi)容可以通過 $1$2$3 來引用。這是正則表達(dá)式中的“捕獲組”(capture groups)。

在示例中,(\d{4})(\d{2}) 和 (\d{2}) 就是捕獲組,分別捕獲年份、月份和日期。

$1、$2、$3 是什么意思?

在正則表達(dá)式中,捕獲組(即 () 中匹配的內(nèi)容)會(huì)按順序賦予數(shù)字標(biāo)識(shí)。

  • $1:引用第一個(gè)捕獲組(這里是 (\d{4})),即年份部分。
  • $2:引用第二個(gè)捕獲組(這里是 (\d{2})),即月份部分。
  • $3:引用第三個(gè)捕獲組(這里是 (\d{2})),即日期部分。

假設(shè)請(qǐng)求的 URL 是 /archive/2024/03/25,在 rewrite 指令中,(\d{4}) 將捕獲到 2024(\d{2}) 捕獲到 03,另一個(gè) (\d{2}) 捕獲到 25。

  • $1 就是 2024(第一個(gè)捕獲組)。
  • $2 就是 03(第二個(gè)捕獲組)。
  • $3 就是 25(第三個(gè)捕獲組)。

try_files 指令

try_files 用于檢查一系列文件是否存在,如果文件存在則繼續(xù)處理,否則進(jìn)行 URL 重寫。它常用于靜態(tài)資源的處理,例如檢查文件是否存在,如果不存在,則重寫請(qǐng)求到某個(gè)頁面(通常是首頁或錯(cuò)誤頁面)。

try_files <文件1> <文件2> ... <重寫目標(biāo)>;

常見的 URL 重寫場(chǎng)景

實(shí)現(xiàn) 301/302 重定向

當(dāng)你需要將舊 URL 重定向到新 URL 時(shí),rewrite 指令非常有用。301 是永久重定向,告訴搜索引擎這個(gè)頁面已經(jīng)被永久移動(dòng);302 是臨時(shí)重定向,表示頁面將暫時(shí)被移動(dòng)到新的 URL。

示例:將 http://example.com/old-page 重定向到 http://example.com/new-page

server {
    listen 80;
    server_name example.com;

    location /old-page {
        rewrite ^/old-page$ /new-page permanent;
    }

    location /new-page {
        # 處理新頁面的配置
    }
}

配置解釋:

  • rewrite ^/old-page$ /new-page permanent;:將 /old-page 重定向到 /new-page,并使用永久重定向(301)。
  • permanent 標(biāo)志表示這是一個(gè)永久性重定向。

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

如果你希望所有請(qǐng)求都通過 www.example.com 訪問,可以使用 Nginx 重定向非 www 域名的請(qǐng)求。

示例:將 example.com 重定向到 www.example.com

server {
    listen 80;
    server_name example.com;

    # 進(jìn)行 301 重定向
    return 301 http://www.example.com$request_uri;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        # 正常的站點(diǎn)配置
    }
}

配置解釋:

  • return 301 http://www.example.com$request_uri;:將所有 example.com 的請(qǐng)求重定向到 www.example.com,并保留請(qǐng)求的 URI。

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

你可以使用正則表達(dá)式對(duì) URL 進(jìn)行重寫,使 URL 更加簡(jiǎn)潔、符合 SEO 標(biāo)準(zhǔn)。

示例:將 /category/id/123 重寫為 /category/123

server {
    listen 80;
    server_name example.com;

    location /category/id/ {
        rewrite ^/category/id/(\d+)$ /category/$1 last;
    }
}

配置解釋:

  • rewrite ^/category/id/(\d+)$ /category/$1 last;:將 /category/id/123 重寫為 /category/123,并使用 last 標(biāo)志繼續(xù)匹配新的 location 塊。

動(dòng)態(tài) URL 重寫:參數(shù)化查詢

如果你的網(wǎng)站 URL 需要支持動(dòng)態(tài)查詢參數(shù),可以使用 rewrite 指令根據(jù) URL 參數(shù)進(jìn)行重寫。

示例:將 /search?q=keyword 重寫為 /search/keyword

server {
    listen 80;
    server_name example.com;

    location /search {
        rewrite ^/search\?q=(\w+)$ /search/$1 last;
    }
}

配置解釋:

  • rewrite ^/search\?q=(\w+)$ /search/$1 last;:將 /search?q=keyword 重寫為 /search/keyword,并使用 last 標(biāo)志繼續(xù)匹配新的 location 塊。

404 頁面重定向

當(dāng)請(qǐng)求的文件或頁面不存在時(shí),你可能希望將請(qǐng)求重定向到一個(gè)自定義的 404 頁面或者首頁??梢酝ㄟ^ try_files 指令實(shí)現(xiàn)。

示例:當(dāng)請(qǐng)求的文件不存在時(shí),重定向到 index.html

server {
    listen 80;
    server_name example.com;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

配置解釋:

  • try_files $uri $uri/ /index.html;:Nginx 將首先檢查請(qǐng)求的文件是否存在,如果不存在,則將請(qǐng)求重寫為 /index.html

結(jié)合正則表達(dá)式進(jìn)行動(dòng)態(tài) URL 重寫

Nginx 支持強(qiáng)大的正則表達(dá)式匹配功能,可以用來處理更復(fù)雜的 URL 重寫需求。以下是一個(gè)更復(fù)雜的 URL 重寫示例,結(jié)合條件和正則表達(dá)式來進(jìn)行動(dòng)態(tài)路由。

示例:根據(jù)日期重寫 URL

server {
    listen 80;
    server_name example.com;

    location /archive/ {
        rewrite ^/archive/(\d{4})/(\d{2})/(\d{2})$ /archive?year=$1&month=$2&day=$3 last;
    }
}

配置解釋:

  • rewrite ^/archive/(\d{4})/(\d{2})/(\d{2})$ /archive?year=$1&month=$2&day=$3 last;:將 /archive/2024/03/25 重寫為 /archive?year=2024&month=03&day=25。

以上就是在Nginx中實(shí)現(xiàn)URL重寫與重定向的詳細(xì)內(nèi)容,更多關(guān)于Nginx URL重寫與重定向的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nginx+lua+redis 灰度發(fā)布實(shí)現(xiàn)方案

    nginx+lua+redis 灰度發(fā)布實(shí)現(xiàn)方案

    在微服務(wù)化進(jìn)程中,利用nginx+lua+redis實(shí)現(xiàn)灰度發(fā)布至關(guān)重要,,通過nginx+lua反向代理,根據(jù)客戶端ip進(jìn)行路由控制,配合redis存儲(chǔ)允許訪問微服務(wù)的ip地址,可以有效地進(jìn)行用戶分流,感興趣的可以了解一下
    2024-10-10
  • CentOS下 安裝 Nginx的方法

    CentOS下 安裝 Nginx的方法

    這篇文章主要介紹了CentOS下 安裝 Nginx的方法,本文內(nèi)容簡(jiǎn)單,通過實(shí)例代碼給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • nginx的配置轉(zhuǎn)發(fā)到其他網(wǎng)站詳解

    nginx的配置轉(zhuǎn)發(fā)到其他網(wǎng)站詳解

    這篇文章主要為大家介紹了nginx的配置轉(zhuǎn)發(fā)到其他網(wǎng)站過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺析nginx 客戶端返回499的錯(cuò)誤碼的問題

    淺析nginx 客戶端返回499的錯(cuò)誤碼的問題

    我們服務(wù)器客戶端一直有返回錯(cuò)誤碼499的日志,以前覺得比例不高,就沒有仔細(xì)查過,最近有領(lǐng)導(dǎo)問這個(gè)問題,為什么耗時(shí)只有0.0幾秒,為啥還499了?最近幾天就把這個(gè)問題跟蹤定位了一下,這里做個(gè)記錄,對(duì)nginx返回499錯(cuò)誤碼相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-10-10
  • nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn)

    nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn)

    這篇文章主要介紹了nginx worker進(jìn)程循環(huán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Nginx端口映射配置方法

    Nginx端口映射配置方法

    這篇文章主要介紹了Nginx端口映射配置方法和多端口映射,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 使用nginx搭建點(diǎn)播和直播流媒體服務(wù)器的方法步驟

    使用nginx搭建點(diǎn)播和直播流媒體服務(wù)器的方法步驟

    本篇文章主要介紹了使用nginx搭建點(diǎn)播和直播流媒體服務(wù)器的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nginx服務(wù)狀態(tài)監(jiān)控的方法

    Nginx服務(wù)狀態(tài)監(jiān)控的方法

    這篇文章主要介紹了Nginx服務(wù)狀態(tài)監(jiān)控的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 502?Bad?Gateway產(chǎn)生的原因及8個(gè)詳細(xì)的解決方法總結(jié)

    502?Bad?Gateway產(chǎn)生的原因及8個(gè)詳細(xì)的解決方法總結(jié)

    Nginx?502?Bad?Gateway的錯(cuò)誤已經(jīng)遇到好幾次了,這里做一下記錄,備忘,下面這篇文章主要給大家介紹了關(guān)于502?Bad?Gateway產(chǎn)生的原因及8個(gè)詳細(xì)的解決方法,文中的介紹非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • nginx優(yōu)化的六點(diǎn)方法

    nginx優(yōu)化的六點(diǎn)方法

    這篇文章主要介紹了nginx優(yōu)化的六點(diǎn)方法,有對(duì)nginx優(yōu)化不太熟悉的同學(xué)可以參考下
    2021-01-01

最新評(píng)論