Używam IIS Express do opracowania aplikacji MVC 3, która przepisuje adresy URL w pliku web.config. Natknąłem się na dziwną sytuację, w której niektóre zasady działają doskonale, a inne zawodzą.
Na przykład ten działa:
<rule name="Remove ETag">
<match serverVariable="RESPONSE_ETag" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
(źródło: https://stackoverflow.com/a/8089525/88709)
Ten nie robi (podaje Unrecognized attribute 'url'
w drugiej linii):
<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>
(źródło: http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx)
Zgodnie z Przedstawiamy IIS Express, autorstwa ScottGu, IIS Express umożliwia pełny zestaw funkcji serwera WWW – w tym SSL, Przepisywanie adresów URL, obsługę multimediów i wszystkie inne moduły IIS 7.x.
Byłem skłonny wierzyć, że być może moduł przepisywania adresów URL dostarczany z IIS Express to wersja 1.0, a nie 2.0. Zainstalowałem więc moduł przepisywania adresów URL 2.0, ale nadal pojawia się ten sam błąd.
Czy ktoś ma pojęcie dlaczego tak się dzieje? Jeśli ma to znaczenie, moja konfiguracja to Visual Studio 2010 SP1, IIS Express 7.5.1070, ASP.NET MVC 3.