我将使用Helicon的ISAPI_REWRITE的Win 2003框升级到Win 2012框(IIS 8.5)并查看URL Rewrite 2.0作为替代。
我的一条规则是递归的,允许将URL中无限数量的键/值对转换为传递给.aspx页面的查询字符串值。
URL Rewrite 2.0有一个方便的导入功能,但它不喜欢使规则递归的标志。我说递归是因为它将一对键/值处理成重写,然后将重写传递回引擎,如果有更多对,则通过相同规则获取它,或者进入最终规则,其中所有重写都通过到最后的形式。
以下是来自Helicon的规则 - 我理解它的语法类似于apache规则,除了使其递归的标志(NS)
#Allow for /flag/key/value/key/value for .NET - using /mci as the flag
RewriteRule ([^?]*/mci)(\?[^/]*)?/([^/]*)/([^/]*)(.*/[^?/]+\.html) $1(?2$2&:\?)$3=$4$5 [NS,I]
RewriteRule ([^?]*)/mci(\?[^/]*)?/([^?/]+)\.html $1/$3.aspx$2 [I,L]
这允许:
http://www.whatever.com/subdir/mci/g/5/i/200/c/cookies/blah.html
要改写成:
http://www.whatever.com/subdir/blah.aspx?g=5&i=200&c=cookies
URL Rewrite 2.0抱怨(NS)标志,但是我找不到另一个设置,说明"在你完成这个规则后,从一开始就通过规则引擎传回这个重写" - 或者首选"继续处理此重写,直到它不再匹配模式。"
任何帮助表示赞赏。我看到我可以写自己的提供者,但我认为这种解决方案不仅仅需要我。