Nginx 的 rewrite 規(guī)則是 Nginx 服務(wù)器中用于 URL 重寫(xiě)和 URL 路由的重要功能。它允許你根據(jù)特定的條件修改請(qǐng)求的 URL,并將其映射到不同的資源或執(zhí)行特定的操作。以下是關(guān)于 Nginx rewrite 規(guī)則如何編寫(xiě)的詳細(xì)介紹:
一、基本語(yǔ)法
Nginx 的 rewrite 規(guī)則使用 `rewrite` 指令來(lái)定義。其基本語(yǔ)法如下:
```nginx
rewrite pattern replacement [flag];
```
- `pattern`:表示要匹配的 URL 模式,可以是正則表達(dá)式或普通字符串。
- `replacement`:表示匹配成功后要替換成的 URL 字符串。
- `flag`:可選參數(shù),用于指定匹配和替換的行為,常見(jiàn)的 flag 有 `last`、`break`、`redirect`、`permanent` 等。
二、匹配模式
1. 普通字符串匹配:
可以直接使用普通字符串作為匹配模式,例如 `rewrite ^/old-page$ /new-page redirect;`,表示將請(qǐng)求的 `/old-page` 路徑重寫(xiě)為 `/new-page`,并使用 302 臨時(shí)重定向。
2. 正則表達(dá)式匹配:
使用正則表達(dá)式可以更靈活地匹配 URL 模式。例如,`rewrite ^/product/(\d+)$ /product.php?id=$1 last;`,表示將請(qǐng)求的 `/product/` 后跟一個(gè)數(shù)字的路徑,重寫(xiě)為 `/product.php?id=` 加上匹配的數(shù)字,并使用 `last` 標(biāo)志,表示繼續(xù)匹配后續(xù)的 rewrite 規(guī)則。
三、替換規(guī)則
1. 簡(jiǎn)單替換:
直接指定要替換成的 URL 字符串,如上述的普通字符串匹配示例。
2. 變量引用:
可以使用 Nginx 中的變量來(lái)進(jìn)行替換。例如,`rewrite ^/user/([^/]+)$ /profile.php?username=$1 last;`,其中 `$1` 表示匹配到的第一個(gè)括號(hào)內(nèi)的內(nèi)容,即用戶(hù)名。
四、標(biāo)志參數(shù)
1. `last`:
表示繼續(xù)匹配后續(xù)的 rewrite 規(guī)則,通常用于重寫(xiě) URL 并跳轉(zhuǎn)到新的 URL 后繼續(xù)處理請(qǐng)求。
2. `break`:
表示停止匹配后續(xù)的 rewrite 規(guī)則,一旦匹配成功就立即執(zhí)行替換操作。
3. `redirect`:
使用 302 臨時(shí)重定向,瀏覽器會(huì)繼續(xù)請(qǐng)求新的 URL。
4. `permanent`:
使用 301 永久重定向,瀏覽器會(huì)緩存新的 URL,并在后續(xù)請(qǐng)求中直接使用新的 URL。
五、示例應(yīng)用
假設(shè)我們有一個(gè)電商網(wǎng)站,需要將舊的商品 URL 重寫(xiě)為新的 URL 結(jié)構(gòu)。例如,將 `/old-product/123` 重寫(xiě)為 `/product.php?id=123`??梢允褂靡韵?rewrite 規(guī)則:
```nginx
server {
listen 80;
server_name example.com;
location / {
rewrite ^/old-product/(\d+)$ /product.php?id=$1 last;
}
}
```
在上述示例中,當(dāng)請(qǐng)求的 URL 匹配到 `/old-product/` 后跟一個(gè)數(shù)字的模式時(shí),將被重寫(xiě)為 `/product.php?id=` 加上匹配的數(shù)字,并繼續(xù)處理后續(xù)的請(qǐng)求。
Nginx 的 rewrite 規(guī)則是一個(gè)非常強(qiáng)大的功能,可以幫助你實(shí)現(xiàn)各種 URL 重寫(xiě)和路由需求。通過(guò)靈活運(yùn)用匹配模式、替換規(guī)則和標(biāo)志參數(shù),你可以輕松地對(duì)網(wǎng)站的 URL 結(jié)構(gòu)進(jìn)行調(diào)整和優(yōu)化,提高網(wǎng)站的可讀性和用戶(hù)體驗(yàn)。在編寫(xiě) rewrite 規(guī)則時(shí),需要注意規(guī)則的順序和優(yōu)先級(jí),以及對(duì)服務(wù)器性能的影響。