0

我正在考虑用 IIS 7 URL 重写 2.0 规则替换一个 PHP 重定向脚本,该脚本将“/”上的查询字符串拆分。

这是从原始重定向脚本中的请求中提取信息的代码:

list($campaign,$banner,$add_code,$deploy,$opt) = split("/",$_SERVER['QUERY_STRING']);

这就是我认为可以替代的东西:

<rule name="MyRule">
   <match url="(.*?)/(.*?)/(.*?)/(.*?)/(.*)" />
   <action type="Redirect" url="TestRedirectTarget.aspx/?campaign={R:1}&amp;banner={R:2}&amp;add_code={R:3}&amp;deploy={R:4}&amp;opt={R:5}" />
</rule>

我在问是否有什么我没有想到的匹配正则表达式与 PHP string-split-assiged-to-list 逻辑的功能相同。我发现了一个问题,我不得不使用惰性匹配来处理超过 5 条斜杠分隔的 url 的情况。我想知道是否还有其他情况会导致结果不一样。

4

1 回答 1

1

您的 match expr 与包含服务器名称/地址(映射不匹配)且其 qs 包含少于 5 个部分(可能根本不匹配)的 wrt url 不同。
要捕获这些条件,请使用 url 属性,如下所示:
\?([^/]*)($|/([^/]*)($|/([^/]*)($|/([^/]*)($|/(.*)))))
-> TestRedirectTarget.aspx/?campaign={R:1}&amp;banner={R:3}&amp;add_code={R:5}&amp??;deploy={R:7}&amp;opt={R:9}

于 2012-03-05T16:12:15.607 回答