nginx location rewrite用法
时间: 2023-10-05 14:02:46 浏览: 374
nginx的location指令可以用于匹配URL路径,并对匹配的路径进行重写操作。在进行重写操作时,可以使用rewrite指令来修改URL路径。
rewrite指令的语法形式为rewrite regex replacement [flag];其中regex是一个正则表达式,用于匹配URL路径,replacement是要替换的路径,flag是可选的标志符。
当nginx接收到客户端请求时,会依次检查所有的location指令,并根据匹配规则选择应用哪个location指令。如果找到匹配的location指令,nginx会根据该location指令中的rewrite指令对URL路径进行重写。
例如,假设有以下location指令:
location /test/ {
rewrite ^/test/(.*)$ /new/$1 last;
}
当收到的请求路径为/test/abc时,会被匹配到上述指令。其中,正则表达式^/test/(.*)$会匹配到路径中的/abc部分,并保存为$1。然后,replacement中的/new/$1将替换原始路径中的内容,得到新的路径/new/abc。最后,根据last标志符,nginx会在当前请求中应用新的路径进行后续处理。
需要注意的是,rewrite指令中的正则表达式和替换路径都可以包含变量,并且rewrite指令可以存在于不同的location指令中,用于实现更复杂的URL重写逻辑。
相关问题
nginx location中rewrite用法
### Nginx 中 `location` 块内 `rewrite` 指令的用法
在 Nginx 配置中,`rewrite` 指令常用于 URL 重写或跳转逻辑。它可以在 `server` 和 `location` 块中使用,主要用于动态修改请求路径或将用户引导到不同的资源地址[^1]。
#### 1. **基本语法**
`rewrite` 指令的基本形式如下:
```nginx
rewrite regex replacement [flag];
```
- `regex`: 正则表达式,用来匹配请求 URI。
- `replacement`: 替换后的目标路径或 URL。
- `[flag]`: 可选标志位,决定重写的动作模式(如立即停止后续规则、返回状态码等)。常见的标志有:
- `last`: 结束当前 `rewrite` 流程并进入新的查找阶段。
- `break`: 终止所有 `rewrite` 规则,不再继续处理。
- `redirect`: 返回临时重定向 (HTTP 状态码 302)。
- `permanent`: 返回永久重定向 (HTTP 状态码 301)[^2]。
---
#### 2. **示例配置**
##### 示例 1:基于参数匹配的跳转
假设需求为访问形如 `http://www.xjj.com/100-(100|200)-\d+.html` 的链接时,统一跳转到根目录页面 `http://www.xjj.com`。
以下是完整的配置代码:
```nginx
server {
listen 80;
server_name www.xjj.com;
# 定义 location 块
location / {
# 使用正则匹配请求 URI
if ($request_uri ~* ^/100-(100|200)-(\d+)\.html$) {
# 执行重定向操作
rewrite ^(.*)$ http://www.xjj.com permanent;
}
root html;
index index.html index.htm;
}
}
```
在此案例中,`if` 判断语句配合正则表达式实现了对特定 URL 的识别,而 `rewrite` 指令完成了永久重定向的功能[^2]。
---
##### 示例 2:内部路径转换
有时需要将外部可见的 URL 转换成服务器内部的实际文件路径。例如,当用户访问 `/article/id` 时,实际加载的内容来自 `/articles/id/index.html`。
配置如下:
```nginx
server {
listen 80;
server_name example.com;
location /article/ {
# 将 /article/<id> 映射为 /articles/<id>/index.html
rewrite ^/article/(.*)$ /articles/$1/index.html last;
}
location /articles/ {
root /var/www/html;
}
}
```
这里的关键在于 `rewrite` 指令通过替换规则改变了请求路径,并结合 `last` 标志确保新路径能够被正确解析[^1]。
---
##### 示例 3:带查询参数的重写
对于包含查询字符串的 URL,可能需要提取其中的部分作为新路径的一部分。例如,将 `/search?q=query_string` 转换为 `/results/query_string`。
配置如下:
```nginx
server {
listen 80;
server_name search.example.com;
location /search {
# 提取 q 参数值并拼接到新路径中
if ($args ~* q=([^&]+)) {
set $query $1;
rewrite ^.*$ /results/$query? break;
}
}
location /results/ {
root /var/www/search;
}
}
```
在这个例子中,`set` 指令辅助提取了查询参数,随后由 `rewrite` 实现了路径重构[^2]。
---
#### 3. **注意事项**
- 当多个 `rewrite` 规则共存时,需注意其执行顺序以及是否会产生循环调用问题。
- 若涉及敏感数据传输,应优先考虑 HTTPS 协议以保障信息安全。
- 对于复杂的 URL 改造场景,推荐先测试单条规则再逐步扩展整体结构。
---
###
nginx配置 rewrite用法
在Nginx配置中,rewrite指令用于重写URL,可以修改请求的URI或者重定向到其他URL。rewrite指令可以在server、location或if语句块中使用。
以下是rewrite指令的用法示例:
1. 修改URI:
```
rewrite ^/old-uri$ /new-uri last;
```
上述示例将匹配以/old-uri开头的请求,并将其重写为/new-uri。
2. 重定向到其他URL:
```
rewrite ^/old-url$ http://example.com/new-url permanent;
```
上述示例将匹配以/old-url开头的请求,并将其重定向到http://example.com/new-url。
3. 使用正则表达式捕获组:
```
rewrite ^/category/(\d+)$ /index.php?category=$1 last;
```
上述示例将匹配形如/category/123的请求,并将其重写为/index.php?category=123。
需要注意的是,rewrite指令的参数可以包含正则表达式,并且可以使用捕获组来提取匹配的部分。另外,rewrite指令还可以使用标志(flag)来控制重写行为,常用的标志包括last、break、redirect和permanent等。
阅读全文
相关推荐














