【问题标题】:Match all characters and redirect unless the string contains匹配所有字符并重定向,除非字符串包含
【发布时间】:2012-02-22 21:18:30
【问题描述】:

我正在运行几个基于模板的网站,使用 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 的理解不足以完成此操作。如果有人能提供帮助,我将不胜感激。

【问题讨论】:

    标签: regex iis web-config


    【解决方案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>
    

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

    给定“somepage”,它应该产生“default.asp?page=somepage”

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

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

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2015-10-25
      • 1970-01-01
      • 2010-11-22
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多