# 网站重定向

Source: https://support.kapsulehost.com/zh-cn/site-redirects

重定向会将访问者从旧的URL转到新的URL，让您能够在不破坏指向该网站的每一个链接的情况下，对网站进行重组。本指南涵盖三种源路径形式、301与302之间的选择、查询字符串，以及如何解读验证徽章。

## 重定向功能在KPanel中的位置

1. 登录[KPanel](https://kpanel.kapsulehost.com)。
2. 点击左侧边栏中的**网站**，然后点击相应网站。
3. 在网站的左侧菜单中，打开**设置**，再打开**重定向**。

直接访问地址是`/websites/<site-id>/redirects`。

![KPanel中某网站的重定向](https://support.kapsulehost.com/help/screenshots/site-redirects.243dc02e.webp)

此处的重定向由网络服务器在您的应用程序运行之前执行。这使得它们比基于插件的重定向更快，并且即使对于您的应用程序完全无法识别的URL，它们也能正常工作。

## 添加重定向

1. 点击**添加重定向**。
2. 输入**源路径**。
3. 输入**Destination**。
4. 选择**301 永久**或**302 临时**。
5. 决定是否勾选**保留查询字符串**。
6. 点击**添加重定向**。

重定向被应用后，会直接针对您的网站进行检查，因此您看到的状态反映的是真实行为，而非假设。

## 三种源路径形式

| 形式 | 示例 | 匹配对象 |
|---|---|---|
| 精确匹配 | `/old-page` | 仅该路径 |
| 前缀匹配 | `/old-path/` | 该路径及其下的所有内容 |
| 通配符匹配 | `/blog/*` | `/blog/`下的所有内容，并捕获其余部分 |

通配符源路径会捕获与`*`匹配的任意内容，目标地址可以通过`$1`引用它。因此，源路径为`/blog/*`、目标地址为`/news/$1`的规则，会将`/blog/hello-world`发送到`/news/hello-world`，并以同一条规则对其他所有文章执行相同操作。

> **Note:** 重定向创建后，源路径无法更改。如果设置有误，请删除该重定向并新建一个。目标地址、状态码和查询设置均可编辑。

## 目标地址

目标地址可以是以下两种之一：

- **相对地址**，例如`/new-page`，用于将访问者发送到同一网站的其他位置。
- **绝对地址**，例如`https://example.com/new`，用于将访问者完全发送到另一个网站。

绝对地址是构建个性化路径的方式：例如，您域名下的`/docs`指向托管在其他地方的文档。

## 301还是302

**301 永久**会告知浏览器和搜索引擎该迁移是最终的。搜索引擎会将排名信号转移到新URL，并停止请求旧URL。浏览器会缓存该重定向，有时会缓存很长时间。

**302 临时**表示该迁移可能会被撤销。不会进行任何转移，也不会进行长期缓存。

对于真正的结构调整，请使用301：您已经移动了页面，且不会恢复原状。对于您预计会撤销的情况，请使用302，例如将某个页面临时指向促销活动或维护通知。

> **Warning:** 错误的301重定向撤销起来代价高昂。浏览器会积极缓存永久重定向，因此曾经命中错误规则的访问者，即便您已经删除该规则，之后也可能会长期继续跳转到该规则，而您无法清除他们的缓存。当您不确定时，请先使用302，确认无误后再升级为301。

## 保留查询字符串

**保留查询字符串**默认是开启的。开启时，`?utm_source=newsletter`以及其他所有参数都会被带到目标地址。

几乎在所有情况下都应保持开启。丢失查询字符串会破坏活动跟踪、分页和筛选功能，并破坏任何携带状态的链接。在重定向列表中，关闭该选项的规则会标记为`(query stripped)`，让您一眼就能看出哪些规则会丢弃参数。

只有在目标地址绝不能接收旧参数的情况下才应关闭此选项，例如旧参数可能会被目标地址以不同方式解读，从而导致渲染出错误的页面。

## 解读状态徽章

每次保存后，系统会直接针对您的网站（而非通过缓存）对重定向进行测试，结果将显示为**Status**列中的徽章。

| 徽章 | 含义 |
|---|---|
| 尚未验证 | 检查尚未运行，请稍后刷新 |
| 已验证，附带状态码和目标地址 | 重定向已生效，且完全按照您的配置执行 |
| 已应用但未生效，附带状态码 | 规则已写入，但网站返回了其他内容 |

第三种徽章是需要采取行动的情况。它意味着配置已经就位，但重定向并未生效，所显示的状态码会告诉您实际发生了什么。

保存后，您还可能会看到一条警告，提示服务器上的另一个配置声明了相同的域名。发生这种情况时，在该冲突解决之前，重定向不会生效，消息中会指明另一个配置的名称。如果您看到此消息但不确定其含义，请联系支持团队。

## 编辑与删除

每一行都有编辑按钮和删除按钮。

编辑功能可让您更改目标地址、状态码和查询设置。源路径是固定的。

删除操作会要求确认，并说明将会发生的情况：指向该路径的请求将不再被重定向，而是返回该网站在该路径下通常提供的内容，这通常是404页面。

## 规划一次结构调整

在您迁移大量URL之前，一点点规划能省去很多麻烦。

1. **从您的站点地图或分析工具中导出当前的URL列表**，以便了解实际有流量的页面。
2. **将旧路径映射到新路径**，每个URL一行。将共享前缀的内容分组。
3. **对分组使用通配符。** 一条`/blog/*`规则胜过两百条精确匹配规则，而且不会出现偏差。
4. **为不符合模式的例外情况添加精确匹配规则。**
5. **逐一测试每种形式**，然后检查徽章状态。
6. **之后在[网站流量分析](https://support.kapsulehost.com/zh-cn/site-analytics)中关注您的4xx数量。** 404占比上升意味着您遗漏了某些内容。

> **Tip:** 为您可能遗漏的内容添加一个带有品牌标识的404页面，作为安全保障。它能把一条死路变成返回网站的入口。请参阅[自定义错误页面](https://support.kapsulehost.com/zh-cn/site-error-pages)。

## 故障排查

**重定向不生效。** 检查徽章状态。如果显示已应用但未生效，请记下返回的状态码。200通常意味着其他内容先响应了该请求，往往是应用程序本身。

**重定向生效了，但我却到了错误的URL。** 检查是否存在链式跳转：您的规则可能将流量发送到了另一条规则或应用程序会再次重定向的路径。链式跳转速度较慢，并会让搜索引擎感到困惑。请让第一条规则直接指向最终目标地址。

**通配符把所有内容都发送到了同一个页面。** 目标地址缺少`$1`。没有它，所有捕获的内容都会汇聚到同一个目标上。

**我已删除的重定向在浏览器中仍在发生。** 您之前访问过一个301重定向，浏览器对其进行了缓存。请在隐私窗口中测试，以确认该规则确实已经消失。

**查询参数消失了。** 该规则的**保留查询字符串**已被关闭。请编辑该规则并重新开启此选项。

**重定向次数过多，或出现循环。** 两条规则互相指向对方，或某条规则指向了与其自身源路径模式相匹配的路径。请移除循环中的一侧。

## 相关页面

- [自定义错误页面](https://support.kapsulehost.com/zh-cn/site-error-pages)，了解当没有任何规则匹配时访问者会看到什么。
- [网站流量分析](https://support.kapsulehost.com/zh-cn/site-analytics)，用于在结构调整后关注3xx和4xx数量。
- [为网站设置密码保护](https://support.kapsulehost.com/zh-cn/site-password-protect)，用于锁定某个路径而非迁移它。
