我正在尝试使用重写策略设置我的Netscaler设备。我的一个要求是用主页URL替换任何非域URL ...也就是说,我希望Netscaler用主页的URL替换设备后面的所有外部链接(例如:{ {3}})。我正在尝试配置的重写策略类型使用符合PCRE的正则表达式引擎来查找网页上的特定文本(可能多个匹配)。
良好的链接:
https://your.page.domain.edu -- won't be replaced
http://good.domain.edu -- also won't be replaced
错误链接(应替换为主页网址):
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的剩余部分。例如,它将https://my.domain.edu替换为:http://www.google.com
我可以配置重写策略来替换特定的URL(例如,https://my.domain.eduwww.google.com),因此我知道该机制有效。显然,这不适用于一般情况。
我已经尝试将整个正则表达式括在括号中,但这并没有改变任何东西。
是否可以针对一般情况编写正则表达式,以匹配不属于我的所有域的整个URL?
提前感谢您的帮助!
答案 0 :(得分:1)
您可以使用以下正则表达式:
^https?:\/\/[\w.-]+(?<!\.domain\.edu)$
将您的主页网址替换为:
https://my.domain.edu
TEST INPUT:
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
TEST OUTPUT:
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
如果http/https
比使用以下正则表达式更重要:
^(https?:\/\/)[\w.-]+(?<!\.domain\.edu)$
替换:
\1my.domain.edu
<强> INPUT:强>
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
答案 1 :(得分:0)
查看原始的http有效负载,并确保链接如您所愿,它们位于实际有效负载中。
主机名通常是一个http标头,协议常不包含在页面内容中。等等。安装提琴手并观察原始数据。
Netscaler RegEx可以正常工作。
进一步:在尝试重写任何压缩内容之前,请确保对其压缩。如果不是,netscaler将尝试使您的重写与压缩数据/分块内容匹配。