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
Если 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
Посмотрите на необработанную полезную нагрузку http и убедитесь, что ссылки находятся в том виде, в каком вы считаете их действительными.
имя хоста обычно является заголовком http, протокол очень часто не включается в содержимое страницы и т. д. установите fiddler и наблюдайте необработанные данные.
Netscaler RegEx работает как задумано.
Далее: обязательно удалите сжатый контент, прежде чем пытаться переписать его. в противном случае netscaler попытается сопоставить ваши перезаписи со сжатыми данными / порциями.