2016-04-06 3 views
0

У нас есть сайт Umbraco, который использует конфигурационный файл UrlRewriting.net для обработки перенаправлений. Клиент имеет около 60 посадочных доменов, которые они купили и указали на сайт, однако они хотят, чтобы 301 перенаправлял все домены приземления в фактический домен вместе с чем-либо после домена, для этого примера я назову его http://www.mainsite.com/Regex исключить конкретный домен

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

<add name="GlobalRedirect" 
      virtualUrl="https?:\/\/((?!www\.mainsite\.co\.uk).*)\/(.*)" 
      rewriteUrlParameter="ExcludeFromClientQueryString" 
      destinationUrl="http://www.mainsite.co.uk/$2" 
      redirect="Domain" 
      redirectMode="Permanent" /> 

http://www.anything.co.uk/a-page правильно перенаправляют http://www.mainsite.co.uk/a-page.

Однако http://www.anything.com/subpage/another-page перенаправляется на http://www.mainsite.com/another-page и отсутствует /subpage/.

Ошибка за пределами отрицательного обзора, но я не могу решить, как ее исправить.

Любая помощь очень ценится.

+0

Что произойдет, если вы удалите '. *' В первой группе сразу после отрицательного просмотра? – elolos

ответ

0

Ваше регулярное выражение подходит слишком жадно. Если изменить RegEx к этому:

https?:\/\/((?!www\.mainsite\.co\.uk).*?)\/(.*) 

Это будет соответствовать только до тех пор, пока не попадает в первый косую черту после домена. Таким образом, в вашем примере 2 доллара должны содержать подстраницу/другую страницу.

Я очень рекомендую инструмент Expresso для написания и тестирования регулярных выражений. Это позволяет вам разрушать то, что делает RegEx, и запускать тесты против них.

Смежные вопросы