除非字符串包含,否则匹配所有字符并重定向

时间:2012-02-22 21:18:31

标签: regex iis web-config

我正在运行多个基于模板的网站,使用IIS上的web.config将domain.com/somepage转换为domain.com/default.asp?page=somepage,以包含更高级别目录中的正确文件。我正在使用的规则如下:

<rule name="friendly-urls">
    <match url="^[a-zA-Z0-9_]+" />
    <conditions logicalGrouping="MatchAll" />
    <action type="Rewrite" url="default.asp?page={R:0}" />
</rule>

问题是每个网站还有一个移动版本,可在domain.com/m/上找到,以及现在重定向的设置方式,该地址将重定向到domain.com/default.asp?page= m不知何故,我需要对m /目录中的任何内容进行异常处理,但我不了解正则表达式或web.config,以便完成此任务。如果有人能提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:1)

我不熟悉web.config规则,但也许这会起作用,或者至少让你开始:

<rule name="friendly-urls">
    <match url="^([a-zA-Z0-9_]+/)?([a-zA-Z0-9_]+)$" />
    <conditions logicalGrouping="MatchAll" />
    <action type="Rewrite" url="{R:1}default.asp?page={R:2}" />
</rule>

新的Regex将输入URL分为可选的第一个匹配项(包括正斜杠)和必需的第二个匹配项。我们希望将第一个匹配添加到输出URL。如果没有第一个匹配(对于非移动URL),它应该添加一个空字符串。然后像往常一样将第二个匹配附加到输出URL。

鉴于“somepage”,它应该产生“default.asp?page = somepage”

鉴于“m / somepage”,它应该产生“m / default.asp?page = somepage”

除了正则表达式之外我无法测试任何东西,但我希望这有帮助!