【问题标题】:Regex to redirect a url using url rewrite正则表达式使用 url rewrite 重定向 url
【发布时间】:2015-10-02 07:40:00
【问题描述】:

好的,我想知道是否有人可以帮助我尝试编写正则表达式。

基本上,如果用户访问另一个站点上的 URL,我想做的是使用 IIS urlrewrite 模块重定向到特定的 URL。唯一的问题是我还必须捕获一些查询字符串,并将其移动到重定向中。
所以这是输入,用户可以访问的 URL 如下所示:

https://of.example.com/sfsv3.aspx?waform=pro&language=en

我想匹配该 URL(http 或 https,不区分大小写),并从中获取一条信息,即两个字母的语言代码。然后我想转发用户的 url 看起来像:

http://example.com/ca/en/ppf

(其中 en 被我上面捕获的任何内容替换)

所以,我正在使用 IIS 重写模块,并且我已经获得了输入数据和正则表达式,到目前为止,我拥有的正则表达式模式是这样的:

https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))

所以基本上我匹配整个字符串,加上一个组和一个语言子组和它的代码。在 IIS 测试模式对话框中,这是有效的。

我得到以下内容

{R:1} 语言=zh

{R:2} zh

太棒了!那么我的 IIS 重写规则应该如下所示来重定向用户:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="test" stopProcessing="true" enabled="true">
          <match url="https?://of.example.com/sfsv3.aspx\?waform=pro&amp;(language=(..))" ignoreCase="true" />
          <action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

这一切对我来说似乎都是正确的。但是,重定向没有发生。部分\似乎有问题? (一个转义的问号来标记查询字符串的开始)。如果包含此内容,则根本不会发生重定向。

你能帮我弄清楚如何让它工作吗?

【问题讨论】:

  • 你只需要转义反斜杠吗?即.aspx\\?waform
  • 不,反斜杠不是文字。它只是为了逃避?就在它之后。
  • 为什么不https?://of.example.com/sfsv3.aspx\?waform=pro&amp;(language=(..))
  • 如果您不将 & 替换为 &那么 web.config 文件无效并且该站点无法使用。请参阅前面的类似问题:stackoverflow.com/questions/31390162/… 在弄清楚我需要对我期望它工作的实体进行 htmlencode 之后,但仍然没有发生重定向
  • 我希望我不会在这里打败一匹死马,所以如果我是的话,我很抱歉......我知道你的反斜杠不是字面意思,但match 正则表达式也不是(我假设)这意味着您需要转义该反斜杠。换句话说,"\\?"@"\?" 是等价的。

标签: asp.net regex iis url-rewriting


【解决方案1】:

为了记录,我想通了。这是正则表达式的一个特例,在 web.config 中运行它作为 urlrewrite 操作的一部分。在这种情况下,您无法使用简单的正则表达式处理查询字符串,您必须在查询字符串中添加条件。以下是最终的结果:

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="redirect" stopProcessing="true" stopProcessing="true" enabled="true">
                    <match url="sfsv3.aspx\.aspx" ignoreCase="true"/>
                    <conditions>
                        <add input="{QUERY_STRING}" pattern="subject=PROPRCH" />
                        <add input="{QUERY_STRING}" pattern="(..)/subject" />
                    </conditions>
                    <action type="Redirect" url="https://www.example.com/ca/{C:1}/forms/ppf" appendQueryString="false"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多