2012-03-13 5 views
0

Я пытаюсь написать URL-адрес в моих веб-приложениях и сессионных и исходящие с использованием ИИСБОМ URLRewriter так:IIS URL Rewrite Outbound PostBackUrls

www.domain.net/SomeSite.aspx к www.domain.net/SomeSite с помощью этого RegEx для Входящего:

^([A-Za-z0-9]+)([\?A-Za-z0-9=&]+)?$, много к моему удивлению, это на самом деле работает, а также для URL-адресов, таких как www.domain.net/SomeSite.aspx?abc=1 =>www.domain.net/SomeSite?abc=1 с использованием переписан действие: {R:1}.aspx?{R:2}

Но теперь, Outbound, я хотел бы иметь тот же эффект, так что пользователь видит на самом деле www.domain.net/SomeSite, хотя мое веб-приложение может ссылаться на ~/SomeSite.aspx внутренне.

Я использую следующий RegEx для этого:

^([A-Za-z0-9]+).aspx([\?A-Za-z0-9=&#]+)?$ и переписать URL вроде так: /{R:1}{R:2}

В целом это работает, увы, не для, например, Response.Redirect, выполненный в CodeBehind, и он также не работает для PostBackUrl s с asp:Button s.

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

Спасибо,

Dennis

Edit:

Некоторые примеры, так как я предполагаю, что я не совсем ясно, как я подумал:

Пользователь вводит www.domain.com/Login в браузере, Inbound-Rule уловы и перенаправления на www.domain.com/Login.aspx пока не показывают /Login в адресной строке, это нормально.

Однако, когда я нажимаю на то есть с осины: Кнопка с PostBackUrl Login.aspx адресная строка будет отображаться Login.aspx вместо желаемого Login, как получить именно такое поведение?

+0

Почему бы вам не изменить PostBackUrl на/Login вместо Login.aspx? Я думаю, что это должно сработать, по крайней мере, так я обрабатываю обычные якорные тэги (это избавляет Outbound от необходимости делать это!) – ianbailey

+0

Да, это сработало бы, но было бы невероятно неудобно, так как мне нужно было сделать моя отладка в IIS вместо сервера разработки. –

ответ

0

Как оказалось, единственное, что мне нужно было сделать, это добавить правило входящего перенаправления и установить stopProcessing в true для обоих правил. Вот результат:

<rules> 
     <rule name="Clean URL" stopProcessing="true"> 
      <match url="^([A-Za-z0-9]+)([\?A-Za-z0-9#=&amp;]+)?$" /> 
      <action type="Rewrite" url="{R:1}.aspx{R:2}" /> 
     </rule> 
     <rule name="CleanTest" stopProcessing="true"> 
      <match url="^([a-z0-9/]+).aspx([a-zA-Z0-9\?#=&amp;]+)?$" /> 
      <action type="Redirect" url="{R:1}{R:2}" /> 
     </rule> 
</rules>