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

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

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

URL 重寫(xiě)(Rewrite)

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

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

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

Nginx 中的 URL 重寫(xiě)指令

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

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

rewrite 指令

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

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

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

  • 標(biāo)志(可選):控制重寫(xiě)的行為,常見(jiàn)的標(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 的開(kāi)始;
    • /archive/ 是固定的路徑部分;
    • (\d{4}) 匹配 4 位數(shù)字(年份);
    • (\d{2}) 匹配 2 位數(shù)字(月份);
    • (\d{2}) 匹配 2 位數(shù)字(日期);
    • $ 表示匹配 URL 的結(jié)尾。
  • /archive?year=$1&month=$2&day=$3:這是重寫(xiě)后的目標(biāo) URL。這里使用了捕獲組的替換:
    • $1 被替換為第一個(gè)捕獲組(即年份)。
    • $2 被替換為第二個(gè)捕獲組(即月份)。
    • $3 被替換為第三個(gè)捕獲組(即日期)。
    • 最終重寫(xiě)的 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)。

首先來(lái)看這部分正則表達(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ù)字,通常用來(lái)表示年份(比如 2024)。
  • /(\d{2})
    • 同理,(\d{2}) 匹配 2 位數(shù)字,通常用來(lái)表示月份(如 03)或日期(如 25)。
    • 這里的 \d{2} 匹配的是 2 個(gè)數(shù)字,表示月份或日期。
  • /(\d{2})
    • 這個(gè)部分與上面相同,匹配的是 2 位數(shù)字,通常表示日期部分。

綜合起來(lái):

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

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

() 作用:

括號(hào) () 用來(lái) 捕獲匹配的內(nèi)容。捕獲的內(nèi)容可以通過(guò) $1$2$3 來(lái)引用。這是正則表達(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 重寫(xiě)。它常用于靜態(tài)資源的處理,例如檢查文件是否存在,如果不存在,則重寫(xiě)請(qǐng)求到某個(gè)頁(yè)面(通常是首頁(yè)或錯(cuò)誤頁(yè)面)。

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

常見(jiàn)的 URL 重寫(xiě)場(chǎng)景

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

當(dāng)你需要將舊 URL 重定向到新 URL 時(shí),rewrite 指令非常有用。301 是永久重定向,告訴搜索引擎這個(gè)頁(yè)面已經(jīng)被永久移動(dòng);302 是臨時(shí)重定向,表示頁(yè)面將暫時(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 {
        # 處理新頁(yè)面的配置
    }
}

配置解釋:

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

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

如果你希望所有請(qǐng)求都通過(guò) www.example.com 訪問(wèn),可以使用 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 正則重寫(xiě):簡(jiǎn)化 URL 結(jié)構(gòu)

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

示例:將 /category/id/123 重寫(xiě)為 /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 重寫(xiě)為 /category/123,并使用 last 標(biāo)志繼續(xù)匹配新的 location 塊。

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

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

示例:將 /search?q=keyword 重寫(xiě)為 /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 重寫(xiě)為 /search/keyword,并使用 last 標(biāo)志繼續(xù)匹配新的 location 塊。

404 頁(yè)面重定向

當(dāng)請(qǐng)求的文件或頁(yè)面不存在時(shí),你可能希望將請(qǐng)求重定向到一個(gè)自定義的 404 頁(yè)面或者首頁(yè)。可以通過(guò) 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)求重寫(xiě)為 /index.html。

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

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

示例:根據(jù)日期重寫(xiě) 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 重寫(xiě)為 /archive?year=2024&month=03&day=25。

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

相關(guān)文章

  • Nginx?413修改上傳文件大小限制的方法詳解

    Nginx?413修改上傳文件大小限制的方法詳解

    在使用?Nginx?作為?Web?服務(wù)器時(shí),有時(shí)會(huì)遇到客戶端嘗試上傳大文件時(shí)返回???413?Request?Entity?Too?Large???的錯(cuò)誤,本文將介紹如何通過(guò)配置?Nginx?來(lái)解決這個(gè)問(wèn)題,有需要的可以參考下
    2025-05-05
  • Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持

    Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持

    這篇文章主要介紹了Nginx下配置pathinfo及ThinkPHP的URL Rewrite模式支持,使用Nginx運(yùn)行ThinkPHP的必備配置,需要的朋友可以參考下
    2015-07-07
  • nginx中端口無(wú)權(quán)限的問(wèn)題解決

    nginx中端口無(wú)權(quán)限的問(wèn)題解決

    當(dāng) Nginx 日志報(bào)錯(cuò)?bind() to 80 failed (13: Permission denied)?時(shí),這通常是由于權(quán)限不足導(dǎo)致 Nginx 無(wú)法綁定到 80 端口,下面就來(lái)介紹一下該問(wèn)題的解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-07-07
  • 部署Nginx+Apache動(dòng)靜分離的實(shí)例詳解

    部署Nginx+Apache動(dòng)靜分離的實(shí)例詳解

    Nginx不僅能作為Web服務(wù)器,還具有反向代理、負(fù)載均衡和緩存的功能,這篇文章主要介紹了部署Nginx+Apache動(dòng)靜分離的實(shí)例代碼,需要的朋友可以參考下
    2019-12-12
  • nginx部署多前端項(xiàng)目的幾種方法

    nginx部署多前端項(xiàng)目的幾種方法

    最近一臺(tái)服務(wù)器要配置多個(gè)前端項(xiàng)目,個(gè)人總結(jié)了3種方法來(lái)實(shí)現(xiàn)在一臺(tái)服務(wù)器上使用nginx部署多個(gè)前端項(xiàng)目的方法。需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 記錄一次nginx啟動(dòng)失敗的解決過(guò)程

    記錄一次nginx啟動(dòng)失敗的解決過(guò)程

    小編最近遇到這樣一個(gè)問(wèn)題docker nginx起不來(lái)了,導(dǎo)致jira域名映射失敗,如何解決呢?下面小編給大家分享下nginx啟動(dòng)失敗的解決過(guò)程,感興趣的朋友一起看看吧
    2022-02-02
  • nginx?rewrite?用法如何使用rewrite去除URL中的特定參數(shù)

    nginx?rewrite?用法如何使用rewrite去除URL中的特定參數(shù)

    日常服務(wù)中經(jīng)常會(huì)用Nginx做一層代理轉(zhuǎn)發(fā),把Nginx當(dāng)做前置機(jī),這篇文章主要介紹了nginx?rewrite?用法如何使用rewrite去除URL中的特定參數(shù),需要的朋友可以參考下
    2024-02-02
  • Nginx更新SSL證書(shū)的實(shí)現(xiàn)步驟

    Nginx更新SSL證書(shū)的實(shí)現(xiàn)步驟

    本文主要介紹了Nginx更新SSL證書(shū)的實(shí)現(xiàn)步驟,包括下載新證書(shū)、備份舊證書(shū)、配置新證書(shū)、驗(yàn)證配置及遇到問(wèn)題時(shí)的解決方法,感興趣的了解一下
    2025-12-12
  • nginx的80端口無(wú)法被遠(yuǎn)程服務(wù)器訪問(wèn)的問(wèn)題解決

    nginx的80端口無(wú)法被遠(yuǎn)程服務(wù)器訪問(wèn)的問(wèn)題解決

    這篇文章主要介紹了nginx的80端口無(wú)法被遠(yuǎn)程服務(wù)器訪問(wèn)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Nginx下Wordpress的永久鏈接實(shí)現(xiàn)(301,404等)

    Nginx下Wordpress的永久鏈接實(shí)現(xiàn)(301,404等)

    經(jīng)過(guò)多番測(cè)試,終于在nginx下實(shí)現(xiàn)了rewrite的功能,WrodPress的永久鏈接終于生效了
    2012-09-09

最新評(píng)論

海原县| 武平县| 麻阳| 高邮市| 德州市| 洛浦县| 栾城县| 东阿县| 长沙市| 日照市| 尉犁县| 乌苏市| 白银市| 科技| 临沭县| 牙克石市| 浮山县| 临桂县| 杭锦旗| 晴隆县| 商水县| 汝州市| 陈巴尔虎旗| 招远市| 灵台县| 枣阳市| 泽库县| 长乐市| 自贡市| 定襄县| 信宜市| 玉门市| 通化县| 保康县| 毕节市| 隆化县| 当雄县| 新源县| 三穗县| 淄博市| 德安县|