【发布时间】:2011-10-20 05:32:53
【问题描述】:
我有许多全局 IIS7 URL 重写规则,它们默认适用于所有站点。好吧,有几个站点我想为所有规则禁用此重写继承。我怎样才能做到这一点?我不高兴地尝试了以下方法:
<rewrite>
<rules>
<clear />
</rules>
</rewrite>
【问题讨论】:
标签: iis-7 url-rewriting
我有许多全局 IIS7 URL 重写规则,它们默认适用于所有站点。好吧,有几个站点我想为所有规则禁用此重写继承。我怎样才能做到这一点?我不高兴地尝试了以下方法:
<rewrite>
<rules>
<clear />
</rules>
</rewrite>
【问题讨论】:
标签: iis-7 url-rewriting
如果您能够将您需要的功能从全局规则中移到您网站的 web.config 中,您可以在每条规则上添加一个条件,以根据以下条件选择加入或退出每条规则该站点的本地文件的存在。这将允许您部署一组通用代码和配置,但可以进行本地/每个站点的自定义。
选择加入规则示例:
<rule name="HTTP to HTTPS Redirect" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" />
<!-- Opt-in to rule via presense of a local file -->
<add input="{DOCUMENT_ROOT}/Local/rewrite-rule-enable-https.txt" matchType="IsFile" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
注意:本地文件夹未部署,而是用于存储每个站点的文件。
因此,除非在站点的 /Local 文件夹中找到名为“rewrite-rule-enable-https.txt”的文件,否则该规则基本上不会启用。
【讨论】:
对不起,这不能做:
全局重写规则用于定义服务器范围的 URL 重写 逻辑。这些规则在 applicationHost.config 文件中定义 并且它们不能在任何较低的配置上被覆盖或禁用 级别,例如站点或虚拟目录。全局规则始终 对绝对 URL 路径进行操作(即,请求的 URI 没有 服务器名称)。
和
始终首先评估全局规则集,然后再分配 将使用全局生成的 URL 字符串评估规则集 规则集。
http://learn.iis.net/page.aspx/468/using-global-and-distributed-rewrite-rules/
【讨论】: