Mat*_*rts 5 iis asp.net-mvc rewrite iis-8
有人可以告诉我如何检查静态文件是否作为重写规则条件。
我在IIS8上,我的Web应用程序是它自己的网站。我想添加一个重写规则,该规则检查文件是否存在,如果存在,则应用重写。这是我的代码:
<rewrite>
<rules>
<rule name="Find static gravatar" stopProcessing="true">
<match url="^images/animage.png$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="i=(.+)" />
<add input="/favicon.ico" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/Somewhere/Else/images/{C:1}.png" appendQueryString="false" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)
到达网址 /images/animage.png?i=SS
无奈之下,我正在检查一个我知道存在的文件-favicon.ico。如果我注释掉检查文件的第二个条件,它将起作用。在这种情况下,它会失败。
由于它可以在没有<add input="/favicon.ico" matchType="IsFile" />线路的情况下工作,因此我怀疑该线路。
我不得不猜测这与你的路径有关/favicon.ico,因为这matchType="IsFile"是正确的。
有关更多示例,请参阅此链接,他们的解决方案是不使用正斜杠 (/),而是使用反斜杠 (\)。
但我必须在 <add input="{DOCUMENT_ROOT}/{R:1}" matchType="IsDirectory" negate="true" /> 行中使用非斜杠 (/)。我必须使用BACKSLASH()。该行是正确的: <add input="{DOCUMENT_ROOT}{R:1}" matchType="IsDirectory" negate="true" />