URL Rewrite и IIS Express: некоторые правила работают, некоторые нет - PullRequest
4 голосов
/ 06 января 2012

Я использую IIS Express для разработки приложения MVC 3, которое выполняет некоторую перезапись URL в web.config. Я столкнулся с какой-то странностью, когда некоторые правила работают отлично, а другие не работают.

Например, этот работает:

<rule name="Remove ETag">
 <match serverVariable="RESPONSE_ETag" pattern=".+" />
 <action type="Rewrite" value="" />
</rule>

(источник: https://stackoverflow.com/a/8089525/88709)

Этот не (дает Unrecognized attribute 'url' во второй строке):

<rule name="Remove trailing slash" stopProcessing="true">
  <match url="(.*)/$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

(источник: http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx)

Согласно Представлению IIS Express от ScottGu, IIS Express обеспечивает полный набор функций веб-сервера, включая SSL, перезапись URL, Поддержка мультимедиа и все другие IIS 7. х модулей.

Я был склонен полагать, что, возможно, модуль перезаписи URL, который поставляется с IIS Express, является версией 1.0, а не 2.0. Поэтому я установил URL Rewrite Module 2.0 , но я все еще получаю ту же ошибку.

Кто-нибудь знает, почему это происходит? На случай, если это имеет значение, у меня установлена ​​Visual Studio 2010 SP1, IIS Express 7.5.1070, ASP.NET MVC 3.

1 Ответ

2 голосов
/ 06 января 2012

Проблема заключалась в том, что я поместил <rule> в неправильный узел; Правило «Удалить косую черту» должно входить в <rules></rules>, но я неправильно поместил его в <outboundRules></outboundRules> (кстати, именно там находится правило «Удалить ETag»).

...