URL重写导致404

时间:2011-11-26 21:38:56

标签: iis iis-7 url-rewriting

我已经设置了一个简单的规则来重写对我的域的所有请求:

<rule name="Rewrite Test" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="mydomain.com" />
    </conditions>
    <action type="Rewrite" url="http://mydomain.com/TestImage.jpg" appendQueryString="false" />
</rule>

启用此功能后,每次访问我的域时都会收到404错误。但是,如果我将其更改为重定向规则,一切正常。这里有什么我想念的吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

正如Daniel解释的那样,您无法重写域(除非您将IIS设置为ARR的反向代理)。您只能重写到同一站点上的另一个URL,因此它将被隐式重写为原始请求所在的域。

您的重写规则应为:

<rule name="Rewrite Test" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="mydomain.com" />
    </conditions>
    <action type="Rewrite" url="/TestImage.jpg" appendQueryString="false" />
</rule>

如果网站未绑定到提供其他内容的其他域名,您可能还会删除该规则的条件并使其更简单:

<rule name="Rewrite Test" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <action type="Rewrite" url="/TestImage.jpg" appendQueryString="false" />
</rule>

重定向适用于您的示例,因为您可以(当然)将客户端重定向到同一域上的URL,但也可以重定向到另一个域上的URL。