# 导航重定向

> 通过 EP URL 映射控制顶层导航和新标签页，并指向内置插件页面。

Source: https://console.getchrovia.com/zh/docs/sdk-navigation-redirect

**能力：**`navigationRedirect`。**配置：**`internal.navigation_redirect`，URL 模式到目标字符串的对象。不需要 JavaScript API。

## 配置映射

```json
{
  "internal": {
    "navigation_redirect": {
      "https://example.com/old*": "https://example.org/",
      "https://example.com/blank*": ""
    }
  }
}
```

合并到 [EP](https://console.getchrovia.com/zh/docs/sdk-extended-preferences)，按需签名并重启。访问 `https://example.com/old-page` 应加载 `https://example.org/`。空目标表示 `about:blank`，不是网络取消错误。

模式匹配完整 URL，区分大小写。`*` 匹配零个或多个字符，`?` 匹配零个或一个字符。字面 `?` 需要反斜杠转义，例如 JSON 映射键 `"https://example.com/old\\?mode=*"` 会按字面匹配查询分隔符。这不是正则或扩展匹配模式语法。

目标是固定 URL，不是替换模板，不会展开捕获组。非字符串项和无效目标会跳过。避免重叠映射及循环重定向，不要把 JSON 插入顺序当成优先级机制。

## 替换新标签页

安装包含 `index.html`、目录名为 `my-plugin` 的 [Provision 插件](https://console.getchrovia.com/zh/docs/sdk-plugins)，再配置：

```json
{
  "internal": {
    "navigation_redirect": {
      "chrome://newtab/": "provision-extension://my-plugin/index.html"
    }
  }
}
```

使用带末尾斜杠的 `chrome://newtab/`，不是 `chrome://new-tab-page/`。Provision 目标使用已安装插件的目录名和实际存在的页面路径，不需要写死扩展 ID。

如果只有部分 EP 配置的实例需要自定义页面，这种方式不必在扩展清单里使用全局 `chrome_url_overrides.newtab`。

## 范围与边界

规则适用于受支持的 `chrome://` 页面和顶层导航，不适用于 iframe、图片或 fetch 请求。HTTP 重定向后的目标不会再次按这些规则匹配。顶层表单提交匹配后，目标会作为新导航打开，不保留原 POST 请求体或 referrer。不要用它转发表单提交数据。请求级行为使用 [DNR](https://console.getchrovia.com/zh/docs/sdk-declarative-net-request) 或[网络拦截](https://console.getchrovia.com/zh/docs/sdk-network-intercept)。

重定向不是安全白名单，不保证目的地的其他 URL 或 API 路径都被阻止。地址栏或恢复的会话可能显示目标 URL，不保证继续显示原始 URL。

## 验证

分别测试直接导航、受控网页中的链接，以及新标签页。插件目标应在 `chrome://extensions` 检查目录名和页面文件。修改 EP 映射后重新签名并启动已有实例；只编辑 Provision EP 初始文件不会更新本地副本。
