RegEx соответствующие URL-адреса, которые не находятся в моем домене

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

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

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

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

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

2 ответа

Решение

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

^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

Demo2

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

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

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

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

Другие вопросы по тегам