如何向IIS重写映射动态添加规则?

如何向IIS重写映射动态添加规则?,iis,iis-8,url-rewrite-module,Iis,Iis 8,Url Rewrite Module,我正在使用的multitenant应用程序需要动态插入/删除许多重写规则。对于IIS,我们正在考虑使用重写映射 如何在重写映射中动态插入规则?是否直接操作webconfig.xml?IIS会立即接收更改吗 是否对可以添加的规则数量有严格限制 或者。。。有更好的办法吗 谢谢以下是我添加到本地web.config文件中的一般规则 <rule name="301 Redirects for ColdFusion"> <match url=".*" /> <co

我正在使用的multitenant应用程序需要动态插入/删除许多重写规则。对于IIS,我们正在考虑使用重写映射

如何在重写映射中动态插入规则?是否直接操作webconfig.xml?IIS会立即接收更改吗

是否对可以添加的规则数量有严格限制

或者。。。有更好的办法吗


谢谢

以下是我添加到本地
web.config
文件中的一般规则

<rule name="301 Redirects for ColdFusion">
  <match url=".*" />
    <conditions>
      <add input="{ColdFusion301:{REQUEST_URI}}" pattern="(.+)" />
    </conditions>
  <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
<rule name="302 Redirects for ColdFusion">
  <match url=".*" />
    <conditions>
      <add input="{ColdFusion302:{REQUEST_URI}}" pattern="(.+)" />
    </conditions>
  <action type="Redirect" url="{C:1}" appendQueryString="false" redirectType="Temporary" />
</rule>
您可以使用多种方法生成此文件。我编写了一个CustomTag来解析XML文件,在编辑器中显示值,然后将数据直接重写回XML文件

为了让IIS看到更新的规则,您需要“触摸”web.config文件的dateLastModified。您可以使用setFileDate UDF
setFileDate(“#Rootdir#web.config”,Now())
来实现这一点

<rewriteMaps>
    <rewriteMap name="ColdFusion301">
        <add key="/sample301" value="/" />
        <add key="/old_coffee.htm" value="/coffee.htm" />
        <add key="/Gifts/" value="/shop/" />
        <add key="/Gifts" value="/shop/" />
    </rewriteMap>
    <rewriteMap name="ColdFusion302">
        <add key="/sample302" value="/" />
    </rewriteMap>
</rewriteMaps>
function setFileDate(filename){
    var newDate = Now();
    if (ArrayLen(Arguments) GTE 2) { newDate = arguments[2]; }
    if (not isdate(newDate)) { return false; }
    else if (newDate LT '1/1/1970') { return false; }
    if (not fileExists(filename)) { return false; }
    newDate = DateDiff("s", DateConvert("utc2Local", "January 1 1970 00:00"), newDate) * 1000;
    return CreateObject("java","java.io.File").init(JavaCast("string",filename)).setLastModified(newDate);
}