2010-06-30 1 views
1

У нас есть входящие URL-адреса, которые нужно перенаправить, но у нас возникают проблемы с URL-адресами, содержащими плюсы (+).Как переписать URL-адрес, содержащий плюсы и специальные гвоздики?

Например любой входящий URL должен быть перенаправлены на главную страницу нового сайта:

/eng/news/2005+01+01.htm

должны быть перенаправлены на Главная страница нового сайта

/ен/

Использование UrlRewriter.net мы создали правило, которое работает с «нормальными» URL, но не работает для вышеприведенного

<redirect url="~/eng/(.+)" to="/en/index.aspx" /> 

Однако он работает нормально, если я изменить входящий URL в

/eng/news/2005-01-01.htm

В чем проблема и может кто-нибудь помочь?

+0

Почему существует '' 'в начале? –

ответ

0

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

  1. Что такое ~ в начале? Возможно, вы имеете в виду ^, т. Е. Начало строки.
  2. (.+) соответствует любому символу, повторяемому один или несколько раз; она не соответствует + знака, как вы хотите

Это один из способов, чтобы написать (Perl) регулярное выражение, соответствующее URL-адрес, начинающийся со строкой /eng/ и с указанным в + знак:

^\/eng\/.*\+.*

I надеюсь это поможет.

+1

UrlRewriter.net использует синтаксис .NET regex - где '.' * * * включает символ' + '- точно так же, как и любой другой аромат регулярного выражения, который я испытал. –

+0

Кроме того, даже если точка как-то не включает в себя плюс, используя '. * \ +. *' Не работает, если у него несколько символов '+' (как в примере). Что-то вроде '[^ \ n] *' было бы проще –

+0

@Peter Boughton: почему вы говорите, что это не работает? Я думаю, что это так: если я делаю 'perl -pi -e 'if (/^\/eng\/.*\+.*/) {печатать" yes \ n "; } else {print "no \ n"; } '', и я даю'/eng/news/2005 + 01 + 01.htm' в качестве ввода, я получаю 'yes' в качестве вывода. – MarcoS