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

Way*_* Ye 4 asp.net iis url-rewriting

我被一个简单的出站规则所困,如果URL与http://wayneye.com/Feeds/Atom完全匹配,我想将HTTP Content-Type修改为application/atom + xml

我的规则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>
Run Code Online (Sandbox Code Playgroud)

需要帮忙...

Mar*_*urg 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>
Run Code Online (Sandbox Code Playgroud)

为此,必须设置服务器以允许更改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>
Run Code Online (Sandbox Code Playgroud)

您也可以从GUI允许此操作,在主URLRewrite屏幕的操作下使用View Server Variables链接.希望这可以帮助.