在web.config中使用iis重写规则所需的帮助

时间:2013-02-17 01:45:55

标签: iis asp.net-mvc-4 url-rewriting iis-7.5

我正在使用在IIS 7.5中运行的mvc4应用程序,我在设置重写规则时遇到问题。以下是我在web.config中的部分。

 <rewrite>
        <rules>
            <rule name="RewriteImage">
                <match url="/myassets/([_0-9a-z-]+)/images/category/([_0-9]+)-([_0-9a-z-]+)-([0-9]+)" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Rewrite" url="/myassets/{R:1}/images/category/cat_{R:2}_{R:4}_{R:3}.jpg" />
            </rule>
        </rules>
    </rewrite>

我想在上面的url中将图像重写为另一条路径。

我提供了以下网址https://localhost/myassets/en-uk/images/category/123456-5x10-1_my+image+description.jpg,并希望它重写为https://localhost/myassets/en-uk/images/category/cat_123456_1_5x10.jpg,但事实并非如此。

当我在IIS中测试它时,一切正常,但是通过浏览器,规则永远不会开始。我正在寻找关于我哪里出错的建议,因为这变得非常令人沮丧!

这是我唯一的规则,我尝试了一个简单的重定向规则,将大写网址重定向到小写网址,这很好用。

我在web.config中注意到的一件事,第一个重写标记有一个蓝色波浪形,说它是system.webserver未被识别的部分。

应用程序以集成模式运行。

1 个答案:

答案 0 :(得分:0)

问题是你的正则表达式无效。来自official documentation的注释:

  

例如,如果对此URL发出了请求:   http://www.example.com/content/default.aspx?tabid=2&subtabid=3,和   然后在网站级别定义重写规则:规则模式将URL字符串content/default.aspx作为输入。

这意味着,你不应该以开始斜线开始你的正则表达式。

工作示例是:

<rule name="RewriteImage">
    <match url="myassets/([_0-9a-z-]+)/images/category/([_0-9]+)-([_0-9a-z-]+)-([0-9]+)" />
    <action type="Rewrite" url="/myassets/{R:1}/images/category/cat_{R:2}_{R:4}_{R:3}.jpg" />
</rule>