2011-10-11 46 views
4

我被困通过简单的出站规则,我要修改HTTP 内容类型应用/原子+ XML,如果URL完全相符http://wayneye.com/Feeds/Atom在IIS URL自定义HTTP头部重写模块

我的规则XML:

<outboundRules> 
<rule name="AtomFeedsIMEType" patternSyntax="ExactMatch"> 
    <match serverVariable="RESPONSE_CONTENT_TYPE" pattern="http://{HTTP_HOST}/Feeds/Atom" /> 
    <action type="Rewrite" value="application/atom+xml" /> 
</rule> 

需要帮助...

回答

5

您正在根据完整URL匹配服务器变量,包括域名。这不会起作用;-)。 Content-Type的价值无关紧要,无论如何你都会替换它,所以你可以匹配任何东西。为了确保不会在每个页面上都替换它,您需要添加一个前提条件,以仅匹配以/ Feeds/Atom开头的请求(在{REQUEST_URI}上)。这里有一个例子:

<outboundRules> 
    <rule name="AtomFeedsIMEType" preCondition="Match atom feeds"> 
    <match serverVariable="RESPONSE_Content_Type" pattern="(.*)" negate="false" /> 
    <action type="Rewrite" value="application/atom+xml" replace="true" /> 
    </rule> 
    <preConditions> 
    <preCondition name="Match atom feeds"> 
     <add input="{REQUEST_URI}" pattern="^/Feeds/Atom" /> 
    </preCondition> 
    </preConditions> 
</outboundRules> 

为了这个工作,服务器必须被设置为允许改变Content-Type头。这可以在服务器级别或站点级别完成,但需要由管理员完成。它在applicationHost.config中设置,而不是在web.config中设置。这里是的applicationHost.config的一部分,允许对:

<location path="your_site_name"> 
    <system.webServer> 
    <rewrite> 
     <allowedServerVariables> 
     <add name="CONTENT_TYPE" /> 
     </allowedServerVariables> 
    </rewrite> 
    </system.webServer> 
</location> 

您还可以允许这个从GUI,以查看服务器变量下从主屏幕URLRewrite行动联系起来。希望这可以帮助。

+0

非常感谢你的详细解释! –

+0

但是,我仍然有问题!每个:http://learn.iis.net/page.aspx/570/application-request-routing-version-2-overview/ HTTP_CONTENT_TYPE已被更改为RESPONSE_CONTENT_TYPE,无论我使用什么,它都不起作用(即内容类型不会更改)!实际上,我的开发环境请求URI是:http://localhost/WayneBlog.Web/Feeds/Atom,模式“^/Feeds/Atom”是否正确?请指导 –

+0

是的,您必须使用RESPONSE_CONTENT_TYPE来替换Content-Type HTTP标头是正确的。这就是我在我的例子中所做的。如果您的请求URI不同,您必须在前提条件下更改该模式。例如。 pattern =“/ WayneBlog.Web/Feeds/Atom”,或者如果您希望开发环境与实际环境兼容,可以使用pattern =“/ Feeds/Atom $”来匹配任何以/ Feed/Atom结尾的URL。 –