3

我正在尝试使用重写策略设置我的 Netscaler 设备。我的要求之一是用主页 URL 替换任何非域 URL...也就是说,我希望 Netscaler 用主页 URL 替换从设备后面提供的页面上的所有外部链接(例如:https ://my.domain.edu)。我尝试配置的重写策略类型使用符合 PCRE 的正则表达式引擎来查找网页上的特定文本(可能有多个匹配项)。

好的链接:

https://your.page.domain.edu -- won't be replaced  
http://good.domain.edu  -- also won't be replaced

坏链接(应替换为主页 URL):

https://www.google.com    
http://not.the.best.example.org   
http://another.bad.example.erewhon.edu   
https://my.domain.com    

我目前有这种模式:

(https?://)(?![\w.-]+\.domain\.edu)

根据 Netscaler 的 RegEx 评估工具,它匹配上面的坏链接,不匹配好的链接,所以它似乎正在工作......事实上,当我在测试页面上运行它时,Netscaler 找到我所有的 URL想要替换并单独留下好的 URL。

问题是 Netscaler 没有按照我想要的方式替换 URL:它用主页 URL 替换 (https?://) 组,但保留了错误 URL 的剩余部分。例如,它将http://www.google.com替换为: https ://my.domain.eduwww.google.com

我可以配置重写策略来替换特定的 URL(例如https://www.google.com),所以我知道该机制有效。显然,这不适用于一般情况。

我尝试将整个正则表达式括在括号中,但这并没有改变任何东西。

可以为一般情况编写正则表达式,以匹配所有不属于我的域的整个 URL?

提前感谢您的帮助!

4

2 回答 2

1

您可以使用以下正则表达式:

^https?:\/\/[\w.-]+(?<!\.domain\.edu)$

用您的主页 URL 作为替代:

https://my.domain.edu

测试输入:

https://www.google.com
http://not.the.best.example.org
http://another.bad.example.erewhon.edu
https://my.domain.com
https://your.page.domain.edu
http://good.domain.edu

测试输出:

https://my.domain.edu
https://my.domain.edu
https://my.domain.edu
https://my.domain.edu
https://your.page.domain.edu
http://good.domain.edu

正则表达式 101 上的演示

如果http/https比使用以下正则表达式更重要:

^(https?:\/\/)[\w.-]+(?<!\.domain\.edu)$

更换:

\1my.domain.edu

输入:

https://www.google.com
http://not.the.best.example.org
http://another.bad.example.erewhon.edu
https://my.domain.com
https://your.page.domain.edu
http://good.domain.edu

输出:

https://my.domain.edu
http://my.domain.edu
http://my.domain.edu
https://my.domain.edu
https://your.page.domain.edu
http://good.domain.edu

演示2

于 2018-06-01T01:23:12.390 回答
0

查看原始的 http 有效负载并确保链接与您认为的那样位于实际有效负载中。

主机名通常是 http 标头,协议通常不包含在页面内容等中。安装 fiddler 并观察原始数据。

Netscaler RegEx 按预期工作。

进一步:确保在尝试重写之前对任何压缩内容进行放气。如果不是,netscaler 将尝试将您的重写与压缩数据/分块内容相匹配。

于 2018-08-16T22:35:42.620 回答