我们使用带有asp.net C#的IIS7 URL重写模块,所有URL都经过配置并直接写入web.config:
<system.webServer>
<!-- ... -->
<rewrite>
<rules>
<clear />
<rule name="Category URL" stopProcessing="true">
<match url="somepage.aspx" ignoreCase="false"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="REDIRECTION=true"
ignoreCase="false"/>
<add input="{QUERY_STRING}" pattern="categoryid=([^&]*)"/>
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/browsing/categorylanding.aspx?navcategoryid={C:1}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
我需要把它移到一个部分,这样我就可以有单独的QA、DEV和生产规则,我会在该部分定义什么类型?
<configSections>
<section name="IISURLRewriteSection" type="???"/>
</configSections>
一旦从web.config外部移动到另一个自定义配置文件,IIS会自动获取这些设置吗?
我们求助于编写自己的HTTPModule,因为从调试的角度来看,IIS级别出现的任何问题都必须由运营团队参与——只需遵循我们组织中定义的流程:(
imho的最佳解决方案是将配置详细信息移动到外部文件中,然后可以根据环境交换这些文件。
使用从web.config文件中移出IIS7 url重写部分中描述的方法可以很容易地完成这一操作,在Web.config
文件中会有这样的内容:
<system.webServer>
<rewrite configSource="rewrite.config"/>
</system.webServer>
然后,您可以将特定于环境的内容存储在一个单独的文件rewrite.config
中,如下所示:
<rewrite>
<rules>
<clear />
<rule name="Category URL" stopProcessing="true">
<!-- ... --->
</rule>
</rules>
</rewrite>