在IIS URL重写模块中自定义HTTP标头

时间:2011-10-11 08:06:09

标签: asp.net iis url-rewriting

我被一个简单的出站规则所困扰,我想将HTTP Content-Type 修改为 application / atom + xml ,如果URL完全匹配{{3 }}

我的规则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>

需要帮助......

1 个答案:

答案 0 :(得分:6)

您将服务器变量与完整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屏幕的操作下使用View Server Variables链接。希望这会有所帮助。