0

我正在使用在 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 中将图像重写到另一个路径。

我提供以下 urlhttps://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 中对其进行测试时,一切正常,但通过浏览器,规则永远不会生效。我正在寻找关于我哪里出错的建议,因为这变得非常令人沮丧!

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

我在 web.config 中注意到的一件事是,第一个 rewrite 标记下面有一个蓝色波浪线,表示它是 system.webserver 的未识别部分。

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

4

1 回答 1

0

问题是您的正则表达式无效。来自官方文档的说明:

例如,如果对该 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> 
于 2017-07-31T17:44:14.473 回答