RegEx соответствующие URL-адреса, которые не находятся в моем домене - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь настроить свое устройство 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)

Согласно инструменту оценки RegEx Netscaler, это соответствуетплохие ссылки выше и не совпадают с хорошими ссылками, поэтому, кажется, это работает ... фактически, когда я запускаю это на тестовой странице, Netscaler находит все URL-адреса, которые я хочу заменить, и оставляет хорошие URL-адреса в покое.

Проблема в том, что Netscaler не заменяет URL-адреса так, как я хочу: он заменяет группу (https?: //) URL-адресом домашней страницы, но оставляет оставшуюся часть плохойURL.Например, он заменяет http://www.google.com на: https://my.domain.eduwww.google.com

. Я могу настроить Политику перезаписи для замены определенных URL-адресов (например, https://www.google.com),, поэтому я знаю, что механизм работает. Очевидно,, это не сработает для общего случая.

Я пытался заключить все регулярные выражения в скобки, но это ничего не изменило.

Можно ли написать регулярное выражение дляв общем случае, чтобы соответствовать полный URL для всех доменов, которые не являются моими?

Заранее спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 17 августа 2018

Посмотрите на необработанную полезную нагрузку http и убедитесь, что ссылки находятся в том виде, в каком вы считаете их действительными.

имя хоста обычно является заголовком http, протокол очень часто не включается в содержимое страницы.и т. д. установите Fiddler и наблюдайте необработанные данные.

Netscaler RegEx работает как задумано.

Далее: обязательно удалите сжатый контент, прежде чем пытаться переписать его.в противном случае netscaler попытается сопоставить ваши перезаписи со сжатыми данными / порциями.

0 голосов
/ 01 июня 2018

Вы можете использовать следующее регулярное выражение:

^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

Демонстрация по regex101

Если значение 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

...