在Nginx中,URL重写(Rewrite)是通过rewrite
指令实现的,它允许你根据特定的规则将请求的URL修改为另一个URL,从而实现重定向、URL美化以及其他URL相关的操作。以下是一些常用的Nginx rewrite重写规则和示例:
- 重写到固定URI :
rewrite ^/old-uri$ /new-uri last;
```
将所有以`/old-uri`开头的请求重定向到`/new-uri`<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。
2. **重写到带变量的URI** <b class="card40_249__sup_a7f6" data-sup="sup">2</b>:
```nginx
rewrite ^/product/(\d+)$ /product?id=$1 last;
```
将所有以`/product/`开头且包含一个数字的URI重写为`/product?id=`加上该数字<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
3. **添加查询参数** :
```nginx
rewrite ^/product$ /product?id=123 last;
```
将所有以`/product`开头的请求重写为`/product?id=123`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
4. **修改查询参数** :
```nginx
rewrite ^/product?id=(\d+)$ /product?id=$1&category=1 last;
```
将所有以`/product`开头且包含一个数字的URI重写为`/product?id=`加上该数字,并添加`&category=1`<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
5. **移除查询参数** :
```nginx
rewrite ^/product?id=(\d+)&category=1$ /product?id=$1 last;
```
将所有以`/product`开头且包含一个数字和`&category=1`的URI重写为`/product?id=`加上该数字。
6. **将GET请求重写为POST请求** <b class="card40_249__sup_a7f6" data-sup="sup">2</b>:
```nginx
if ($request_method = GET) {
rewrite 1 break;
proxy_set_header X-HTTP-Method-Override POST;
}
```
如果请求方法是GET,则将其重写为POST请求<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
7. **临时重定向** :
```nginx
rewrite ^/old-uri$ /new-uri redirect;
```
将所有以`/old-uri`开头的请求临时重定向到`/new-uri`<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
8. **永久重定向** :
```nginx
rewrite ^/old-uri$ /new-uri permanent;
```
将所有以`/old-uri`开头的请求永久重定向到`/new-uri`<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。
9. **条件判断** <b class="card40_249__sup_a7f6" data-sup="sup">4</b>:
```nginx
if ($host = example.com) {
rewrite 1 break;
}
```
只对`example.com`域名下的请求进行重写。
10. **URL美化** :
```nginx
rewrite ^/products/([0-9]+)$ /products.php?id=$1 last;
```
将所有以`/products/`开头且包含一个数字的URI重写为`/products.php?id=`加上该数字<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
11. **保留原始URL中的其他部分** <b class="card40_249__sup_a7f6" data-sup="sup">5</b>:
```nginx
rewrite ^/old-url/(.*)$ /new-url/$1 permanent;
```
将所有以`/old-url/`开头的URL重写为以`/new-url/`开头的URL,同时保留原始URL中的其他部分<b class="card40_249__sup_a7f6" data-sup="sup">5</b>。
这些规则和示例展示了Nginx中URL重写的强大功能,可以根据实际需求进行灵活配置。在使用重写时,建议先备份配置文件,并在开发或测试环境中进行充分测试,以确保重写规则按预期工作。