# 重写外部URL地址

**URL:** https://meta.discourse.org/t/rewrite-external-urls/277855
**Category:** Support
**Created:** [2023年九月5日 12:41 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855 "2023-09-05T12:41:53Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![kam44](https://avatars.discourse-cdn.com/v4/letter/k/e47c2d/32.png) [@kam44](https://meta.discourse.org/u/kam44)
#### Post date: [2023年九月5日 12:41 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/1 "2023-09-05T12:41:53Z")

</div>

我喜欢使用 Discourse 自动将监视词转换为链接的功能。但是，我也在寻找一种自动转换外部链接的方法，主要是为了插入联盟链接（亚马逊以外的）。我尝试使用监视词中的正则表达式选项来实现这一点，但它似乎不适用于链接。有人有什么建议吗？

谢谢！

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [2023年九月5日 12:45 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/2 "2023-09-05T12:45:02Z")

</div>

您尝试过 [Auto-Linkify Words](https://meta.discourse.org/t/linkify-words-in-post/82193) 主题组件吗？我认为它比“监视的单词”具有更强的正则表达式功能。

---

<div class="post-metadata">

### Author: ![kam44](https://avatars.discourse-cdn.com/v4/letter/k/e47c2d/32.png) [@kam44](https://meta.discourse.org/u/kam44)
#### Post date: [2023年九月5日 13:04 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/3 "2023-09-05T13:04:10Z")

</div>

是的，但没有成功。

---

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [2023年九月5日 13:17 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/4 "2023-09-05T13:17:53Z")

</div>

[Discourse Affiliate 插件](https://github.com/discourse/discourse-affiliate) 支持亚马逊和法国网站 `ldlc.com`，如果它有普遍用途，欢迎提交 PR。

如果不是，您可以使用此插件作为您想实现目标的参考。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年九月5日 14:05 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/5 "2023-09-05T14:05:43Z")

</div>

> [@kam44](#):
>
> 是的，但没有成功。

正则表达式很难。也许你应该分享一下你尝试过的方法？

---

<div class="post-metadata">

### Author: ![kam44](https://avatars.discourse-cdn.com/v4/letter/k/e47c2d/32.png) [@kam44](https://meta.discourse.org/u/kam44)
#### Post date: [2023年九月5日 14:36 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/6 "2023-09-05T14:36:47Z")

</div>

> [@pfaffman](#):
>
> 正则表达式很难

💯 😅

我用谷歌网址示例尝试了：

`/(https?:\\/\\/)?(www\\.)?google\\.com/`  
`/(https:\\/\\/)?(www\\.)?((google)?\\.com)/`

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年九月5日 14:49 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/7 "2023-09-05T14:49:18Z")

</div>

这不足以进行调试。这会（应该会？）匹配一个谷歌网址，但您想替换什么？

> [@sam](#):
>
> `WORD, https://destination.url.com`
> 
> 或者使用正则表达式（在 [JavaScript 实现](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) 中）并采用以下格式
> 
> `/regex/, https://destination.url.com`

---

<div class="post-metadata">

### Author: ![kam44](https://avatars.discourse-cdn.com/v4/letter/k/e47c2d/32.png) [@kam44](https://meta.discourse.org/u/kam44)
#### Post date: [2023年九月5日 14:55 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/8 "2023-09-05T14:55:07Z")

</div>

> [@pfaffman](#):
>
> 这应该会匹配一个谷歌网址，但你想替换什么？

我只需要匹配域名/子域名，而不是所有页面。这是我在 linkify 插件中添加的内容：

`/(https?:\\/\\/)?(www\\.)?example\\.com/, https://example.com/affiliateid`

---

<div class="post-metadata">

### Author: ![Steven](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steven/32/187890_2.png) [@Steven](https://meta.discourse.org/u/Steven)
#### Post date: [2023年九月5日 15:18 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/9 "2023-09-05T15:18:25Z")

</div>

我已经取得了一些进展，似乎可能与 `enable markdown linkify` 设置存在冲突。

此设置比组件具有优势。

我会让 Camille 深入研究，但这可能有助于解决此问题。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年九月5日 15:59 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/10 "2023-09-05T15:59:42Z")

</div>

> [@Steven](#):
>
> 看起来这可能与 `enable markdown linkify` 设置存在冲突。

我也这么觉得。我创建了一个 ` https://www.digitalocean.com/ → https://m.do.co/c/a5bf212d9a92/` 的替换项，如果 `enable markdown linkify` 开启，它就无法工作，如果关闭，它就能工作。我真正想要的是重写链接。

主题组件可能是实现这一目标的一种方式。

---

<div class="post-metadata">

### Author: ![kam44](https://avatars.discourse-cdn.com/v4/letter/k/e47c2d/32.png) [@kam44](https://meta.discourse.org/u/kam44)
#### Post date: [2023年九月5日 16:35 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/11 "2023-09-05T16:35:01Z")

</div>

也许最简单的解决方案是 fork [Discourse Affiliate 插件](https://github.com/discourse/discourse-affiliate) 并添加我的自定义联盟链接。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年九月7日 14:54 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/12 "2023-09-07T14:54:57Z")

</div>

这可能有点大材小用。如果你只是想重写一些 URL，你不需要太多。我有一个主题组件可以重写一些 one-box。

我有一个[主题组件](https://github.com/literatecomputing/runners-onebox-theme)，它可以查找来自特定域的 one-box，并将它们重写为适合该网站的 `<iframe>`。对于像我这样技能平平的人来说，不难将其更改为重写你的链接。

你几乎只需要更改这个：

> <https://github.com/literatecomputing/runners-onebox-theme/blob/main/javascripts/discourse/initializers/initialize-github-status.js#L15-L69>

---

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [2023年九月7日 15:01 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/13 "2023-09-07T15:01:12Z")

</div>

与 Discourse Affiliate 的方法的主要区别在于它会更改已处理内容中的链接，因此它也可以在 Web 应用程序外部使用，例如在电子邮件中或使用不同的客户端时（非常非常罕见）。只需注意这一点。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年九月7日 18:35 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/14 "2023-09-07T18:35:17Z")

</div>

说得有理！而且更改已发布的帖子需要插件。

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2023年十月7日 18:35 UTC](https://meta.discourse.org/t/rewrite-external-urls/277855/15 "2023-10-07T18:35:38Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
