我正在使用在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未被识别的部分。
应用程序以集成模式运行。
答案 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>