在 Vercel 中,redirects
和 rewrites
都是用于处理 URL 请求的功能,它们提供了对请求的不同操作方式。虽然它们的工作原理相似,但它们有不同的行为和用途。下面是它们的区别:
1. Redirects
- 功能:
redirects
用于将用户的请求从一个 URL 重定向到另一个 URL。这意味着浏览器会收到一个 HTTP 响应(通常是 3xx 状态码),并且会告诉浏览器去访问新的 URL 地址。 - 行为:当一个请求被重定向时,浏览器会发起一个新的请求到目标 URL。这会改变用户的地址栏中的 URL。
- 使用场景:适用于永久或临时的 URL 重定向,例如网站迁移、页面更名或短链接的创建。
示例:
{
"redirects": [
{
"source": "/old-page",
"destination": "/new-page",
"permanent": true
}
]
}
source
:原始的请求 URL。destination
:目标 URL(浏览器会被引导到这个 URL)。permanent
:如果为true
,则表示 301 重定向(永久重定向),如果为false
,则表示 302 重定向(临时重定向)。
2. Rewrites
- 功能:
rewrites
用于将请求的 URL 映射到另一个 URL,但不会改变浏览器地址栏中的 URL。也就是说,服务器会从另一个 URL 返回内容,但用户看到的 URL 仍然是原始的 URL。 - 行为:重写是透明的,浏览器地址栏中的 URL 不会发生变化。服务器内部将处理请求并返回目标 URL 的内容。
- 使用场景:适用于将请求代理到不同的路径或提供动态内容,而无需改变 URL,例如静态页面的代理或在服务器端处理请求时的 URL 变化。
示例:
{
"rewrites": [
{
"source": "/old-page",
"destination": "/new-page"
}
]
}
source
:原始的请求 URL。destination
:目标 URL(服务器将返回此 URL 的内容,但浏览器地址栏保持不变)。
主要区别:
特性 | redirects | rewrites |
---|---|---|
URL 更改 | 浏览器地址栏中的 URL 会改变。 | 浏览器地址栏中的 URL 不会改变。 |
HTTP 响应 | 返回 3xx 响应,导致浏览器发起新请求。 | 返回 200 响应,目标 URL 的内容被返回。 |
使用场景 | 用于永久或临时的 URL 重定向。 | 用于内部 URL 路由或内容代理,不改变 URL。 |
状态码 | 支持 301 (永久) 和 302 (临时) 状态码。 | 始终返回 200 状态码。 |
总结:
redirects
:用于将请求重定向到新的 URL,且会改变浏览器地址栏中的 URL。rewrites
:用于内部处理 URL 请求,浏览器地址栏中的 URL 不会变化,但服务器会返回另一个 URL 的内容。
选择使用 redirects
还是 rewrites
,取决于你是否需要让浏览器的地址栏发生变化。