iis7 url重写为webforms aspx到mvc页面

时间:2015-07-23 13:45:34

标签: asp.net-mvc url-rewriting iis-7 url-rewrite-module

我的网站/contact.aspx已成功转发/contact 但我想将旧的/content.aspx?contentid=123重定向到/about/123 这是我的web.config中的重定向XML部分:

<rewrite>
    <rules>
        <rule name="contact" patternSyntax="Wildcard" stopProcessing="true">
            <match url="contact.aspx" />
            <action type="Redirect" url="Contact" redirectType="Found" />
        </rule>
        <rule name="Content" patternSyntax="Wildcard" stopProcessing="true">
            <match url="content.aspx?contentID=*" />
            <action type="Redirect" url="About/{R:1}" appendQueryString="false" redirectType="Found" />
        </rule>
    </rules>
</rewrite>

访问mydomain.com/content.aspx?contentid=123给了我一个404。 也试过没有appendQueryString="false" 似乎很容易解决我,但我错过了一些东西......

使用正则表达式而不是通配符也会给出404:

<rule name="Content">
    <match url="content.aspx?contentID=([0-9]+)" />
    <action type="Redirect" url="About/{R:1}" redirectType="Found" />
</rule>

1 个答案:

答案 0 :(得分:0)

来自IIS rewrite module configuration documentation.

  

针对模式评估的URL字符串不包含查询字符串。要在规则评估中包含查询字符串,可以在规则条件中使用QUERY_STRING服务器变量。

所以经过大量的测试jiggery-pokery后,我认为这应该有效:

<rule name="Content" patternSyntax="ECMAScript" stopProcessing="true">
    <match url="content.aspx" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="contentID=([^&amp;]+)" />
    </conditions>
    <action type="Redirect" url="About/{C:1}" redirectType="Found" appendQueryString="False" />
</rule>