IIS 7 URL重写规则未触发

时间:2010-09-15 15:20:55

标签: iis iis-7 url-rewriting

我在IIS 7中为javascript和css版本控制创建了一个重写规则。规则定义如下:

<rewrite>
   <rules>
     <rule name="Js/Css Cache Rewrite" stopProcessing="true">
       <match url="(.+/public/(javascript|css)/(Debug|Release)/.+\.)\d+\.(js|css)" />
       <action type="Rewrite" url="{R:1}{R:4}" logRewrittenUrl="true" />
     </rule>
   </rules>
 </rewrite>

当我手动测试与正则表达式匹配的url时。网址遵循以下模式: http://mytestsite.com/public/javascript/Release/SomeDir/jsfile.20100915140743.js

关于配置可能缺少什么的任何想法?

3 个答案:

答案 0 :(得分:0)

您的正则表达式以(.+/public/开头,转换为“一个或多个字符,后跟/public/”。 IIS传递给您的URL始于/public/public/,两者都不匹配您的正则表达式。你可能需要像((^|.*/)public/这样的东西。

答案 1 :(得分:0)

由于IIS配置的级别,传入的URL最终成为“public / ...”。如果我在更高级别配置,那么它有完整的URL。我把我的正则表达式更改为:(。* public /(javascript | css)/(Debug | Release)/.+。)\ d +。(js | css)并且它可以工作。

答案 2 :(得分:0)

试试这个

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="permalink">
                    <match url="article/(\D+)(\/)*$" />
                    <action type="Rewrite" url="http://mywebsite.com/article.aspx?id={R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>