如果文件存在,则返回文件,如果文件不存在,则重写

Dem*_*tic 0 asp.net iis iis-7 url-rewriting

我需要一些帮助来在IIS7中编写两个URL重写规则,我已经尝试了最近3个小时,但均未成功。

基本上,我有以下两个规则:

<rule name="Resize Images - Game Thumbnails - Static" stopProcessing="true">
    <match url="^images/c/games/(.+)x(.+)/(.+)$" />
    <conditions logicalGrouping="MatchAny">
        <add input="\mycms\games\images\thumbs\220x150\{R:3}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="/mycms/games/images/thumbs/{R:1}x{R:2}/{R:3}" />
</rule>
<rule name="Resize Images - Game Thumbnails - Dynamic" stopProcessing="true">
    <match url="^images/c/games/(.+)x(.+)/(.+)$" />
    <conditions logicalGrouping="MatchAny">
        <add input="\mycms\games\images\thumbs\{R:1}x{R:2}\{R:3}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="/controls/makeThumb.aspx?folder=games&amp;image={R:3}&amp;w={R:1}&amp;h={R:2}" />
</rule>
Run Code Online (Sandbox Code Playgroud)

如果单独使用这两个规则,则它们都起作用。

例如,如果我只放置静态规则,并且图像存在,那么它将返回图像。

如果我只留下动态规则,并且图像不存在,则创建它。

但是规则为什么不一起起作用?

Dem*_*tic 5

好吧,我发现了问题,基本上这两个规则都起作用:

        <rule name="Resize Images - Game Thumbnails - Static" stopProcessing="true">
            <match url="^images/c/games/(.+)x(.+)/(.+)$" />
            <conditions logicalGrouping="MatchAny">
                <add input="{APPL_PHYSICAL_PATH}mycms\games\images\thumbs\{R:1}x{R:2}\{R:3}" matchType="IsFile" />
            </conditions>
            <action type="Rewrite" url="/mycms/games/images/thumbs/{R:1}x{R:2}/{R:3}" />
        </rule>
        <rule name="Resize Images - Game Thumbnails - Dynamic" stopProcessing="true">
            <match url="^images/c/games/(.+)x(.+)/(.+)$" />
            <conditions logicalGrouping="MatchAny">
                <add input="\mycms\games\images\thumbs\{R:1}x{R:2}\{R:3}" matchType="IsFile" negate="true" />
            </conditions>
            <action type="Rewrite" url="/controls/makeThumb.aspx?folder=games&amp;image={R:3}&amp;w={R:1}&amp;h={R:2}" />
        </rule>
Run Code Online (Sandbox Code Playgroud)

但!!!!这是一个很大的问题,但是,如果删除该图像(出于测试目的或其他目的),则该规则会以某种方式缓存,并且出于某些奇怪的原因,该动态规则将不会执行。强制其执行的唯一方法是回收应用程序池。