如果文件存在,则返回文件,如果文件未退出,则重写

时间:2011-08-03 15:04:00

标签: asp.net iis url-rewriting iis-7

我需要一些帮助来在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>

如果他们独自一人,这两条规则都有效。

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

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

但为什么这些规则不能合作?

1 个答案:

答案 0 :(得分: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>

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