【问题标题】:IIS redirect rule with regex inside condition带有正则表达式内部条件的 IIS 重定向规则
【发布时间】:2023-01-29 02:37:52
【问题描述】:

使用此规则时出现 500 错误:

<rule name="Remove Query String" stopProcessing="true">
  <match url="(.*)" />
<conditions>
   <add input="{QUERY_STRING}" pattern="^url=[^&]+" />
</conditions>
<action type="Redirect" url="{C:1}webp" appendQueryString="false" />

问题在里面

    <add input="{QUERY_STRING}" pattern="^url=[^&]+" />, 

实际上模式似乎是错误的,但当我在线查看时它可以正常工作。所有解析器都解析它。

我想要实现的是将所有具有查询字符串 url= 的 URL 重定向到 url,其值对应于初始请求中 url 的值,但忽略 & 之后的所有内容,或其他内容之后的所有内容(例如 webp)这就是我的原因想要在多个逻辑组中分离模式。

【问题讨论】:

    标签: c# redirect iis web-config


    【解决方案1】:

    元素中的 pattern 属性正在寻找一个以“url=”开头、后跟一个或多个非 & 符号的字符的查询字符串,除此之外别无其他。此模式可能与您要重定向的 URL 不匹配,并可能导致 500 错误。

    要实现重定向具有以“url=”开头的查询字符串的 URL 并忽略其后的所有内容的期望行为,您可以在元素中使用以下模式:

    <add input="{QUERY_STRING}" pattern="^url=([^&]+)" />
    

    如果此模式以“url=”开头,后跟一个或多个不是&符号的字符,则此模式将匹配查询字符串。然后它将捕获捕获组中的“url”查询字符串的值(由括号表示)。然后,您可以使用 {C:1} 在元素的 url 属性中引用此捕获组:

    <action type="Redirect" url="{C:1}" appendQueryString="false" />
    

    通过使用此模式,与查询字符串“url=something”匹配的 URL 将仅重定向到“something”。

    这应该修复 500 错误并实现所需的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2017-05-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      相关资源
      最近更新 更多