Vercel 的
---
### 情况一:静态路径重写 (没有使用正则表达式捕获)
这是您最开始的例子:
* 行为: 这种配置像一个**别名**。你告诉 Vercel:“
* `request.url`: 当请求到达时,Vercel 查找这个别名,然后把请求完全交给
---
### 情况二:动态路径重写 (使用正则表达式捕获)
这是您的第二个例子:
* 行为: 这种配置像一个**前端控制器**或**网关**。`/(.*)
* `request.url`: 为了让
---
### 总结
|
| :----------------------- | :------------- | :------------------------ |
|
|
#programming
rewrites
在这两种情况下的行为是不同的:---
### 情况一:静态路径重写 (没有使用正则表达式捕获)
这是您最开始的例子:
"rewrites": [
{
"source": "/w",
"destination": "/api/index"
}
]
* 行为: 这种配置像一个**别名**。你告诉 Vercel:“
/w
这个路径就是 /api/index
的一个别名”。* `request.url`: 当请求到达时,Vercel 查找这个别名,然后把请求完全交给
/api/index
处理。此时,对于 api/index
函数来说,它看到的 request.url
就是它自己的地址:`/api/index`。原始的 /w
在这个阶段已经被“翻译”掉了。---
### 情况二:动态路径重写 (使用正则表达式捕获)
这是您的第二个例子:
"rewrites": [
{
"source": "/(.*)",
"destination": "/api/index.js"
}
]
* 行为: 这种配置像一个**前端控制器**或**网关**。`/(.*)
中的
(.*) 是一个正则表达式的“捕获组”,它会捕获所有传入的路径。你告诉 Vercel:“无论用户访问什么路径,都把它捕获下来,然后交给
/api/index.js` 这个函数去处理”。* `request.url`: 为了让
/api/index.js
能正确处理请求(例如,根据 URL 显示不同的页面内容),Vercel 必须把**原始捕获到的路径**告诉它。因此,在这种情况下,函数内部拿到的 request.url
**就是用户访问的原始 URL**。---
### 总结
|
source
的写法 | 行为模式 | 函数收到的 request.url
|| :----------------------- | :------------- | :------------------------ |
|
"/w"
(静态路径) | 别名 (Alias) | "/api/index"
(目标地址) ||
"/(.*)"
(动态正则捕获) | 网关 (Gateway) | "/w"
(原始请求地址) |#programming