У меня есть очень простое правило OutBound UrlRewriter, которое переписывает URL-адреса, найденные в теле потока ответов http:
<rewrite>
<outboundRules>
<rule name="Scripted"
preCondition="IsHtml"
patternSyntax="ECMAScript"
stopProcessing="false">
<match filterByTags="None" pattern="http://someurl.com" />
<action type="Rewrite" value="http://anotherurl.com" />
</rule>
<preConditions>
<preCondition name="IsHtml" patternSyntax="Wildcard">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Проблема в том, что при включении preCondition
перезапись не происходит.
Мне нужно иметь возможность использовать предварительное условие, поскольку эта страница является страницей ASP.NET и использует ресурсы сценариев ASP.NET, например, <script src="ScriptResource.axd?d=...." type="text/javascript" />
.
По умолчанию ресурсы скрипта сжаты gzip, и я хочу сохранить их в таком виде. Без предварительного условия для типа содержимого средство перезаписи URL RewriteModule
выдает ошибку 500,52 - « Правила исходящей перезаписи не могут применяться, когда содержимое ответа HTTP закодировано (« gzip »). «
Используя Fiddler, я вижу, что Content-Type: text/html; charset=utf-8
отправляется в заголовке ответа, но UrlRwriter, похоже, не может соответствовать этому.
Почему это происходит?