【问题标题】:REGEX on IIS server - redirect trailing slashIIS 服务器上的正则表达式 - 重定向尾部斜杠
【发布时间】:2016-02-12 19:29:58
【问题描述】:

这里有正则表达式大师吗?

我试图找到答案,但我接近了那个答案: Matching strings not ending with .html 但不幸的是,它不能满足我的需求:

在 IIS 7.5 上想要重定向任何地址而不使用尾部斜杠:

  • 目录
  • 目录/章节

  • 目录/章节/

但不是

  • 目录/
  • 目录/章节/
  • 目录/章节/anything.any
  • 目录/章节/anything.any4
  • 目录/章节/anything.an

(2到4个字符之间的扩展)

棘手的部分是,我需要获取第一组“目录”,因为它在条件中用于检查它是否存在于重写表中。 现在,我得到第一组: ((.+?)(?=/|$))

但是,要检查以下内容(如果有的话),我就卡住了。

我不知道该怎么做...

非常感谢您的帮助!!!

编辑:

为了更清楚,这就是我想要实现的目标:

  • 目录 ==> MATCH + 捕获第 1 组中的“目录”
  • 目录/章节 ==> MATCH + 捕获第 1 组中的“目录”
  • 目录/ ==> 不匹配
  • 目录/章节/ ==> 不匹配
  • 目录/章节/anything.any ==> 不匹配
  • 目录/章节/anything.any4 ==> 不匹配
  • 目录/章节/anything.an ==> 不匹配

【问题讨论】:

  • 试试^(?!catalog\/chapter/.*$).*[^/]$

标签: regex iis


【解决方案1】:

您可以将条件转换为负前瞻

^([^/]+)(?!.*\.\w+$)(?!.*/$).*$
        ^---- 1----^^-- 2--^

a regex demo

当 URL 以文件扩展名结尾时,第一个匹配失败(\w+$ 将需要 1 个或多个单词字符出现在字符串的末尾)。 如果 URL 以 / 结尾,则第二次前瞻将导致匹配失败。

注意:如果您不使用正则表达式分隔符,则在您的环境中可能不需要转义 /

【讨论】:

  • 您好 Wiktor,感谢您的帮助,不幸的是,这并不是我想要的。我想 1 - 捕获 URL 中的任何内容的目录名称,不带斜杠 example.com/catalog 或第一个斜杠之前的任何内容,如 example.com/catalog/anything/behind 2 - 如果 /catalog 之后有任何内容,那么我想检查它是否是文件与否。如果不是,并且没有斜杠,则重定向
  • 请查看^([^/]+)(?!.*\.[^.]+$).*[^/]$
  • 关闭,但它仍然匹配:catalog/test/index.html 而我不希望这样,因为 URL 是正确的,并且不需要重定向。
  • ^([^/]+)(?!.*\.[^.]+$).*[^/]$ 可以匹配catalog/test/index.html。它以扩展名结尾,不能与正则表达式匹配。另外,我认为前瞻应该像^([^/]+)(?!.*\.[^/.]+$).*[^/]$ 一样精确。
  • 我终于找到了! ^([^/]+)(?!.*\.\w{1,4}$)(?!.*\/$).*$ 谢谢你的帮助,维克托!
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多