首页 > 解决方案 > 验证除特定扩展名之外的所有内容的正则表达式

问题描述

我试图让这个正则表达式工作,以便wildfly服务器将所有不包含某些扩展的请求重定向到 index.html

regex['^[^.]+$|\.(?!(js|css|svg|ico|jpg|html)$)([^.]+$)'] -> rewrite['/index.html']

问题是现在任何带有双扩展名的东西,例如.min.cssor.min.js都会使正则表达式失败。

我尝试了以下方法,但没有奏效:

regex['^[^.]+$|\.(?!(js|css|svg|ico|jpg|html|min\.css|min\.js)$)([^.]+$)'] -> rewrite['/index.html']

非常感谢任何帮助和指导

标签: regexwildfly

解决方案


在以下假设下

  • 输入是一个 URL 路径
  • 查询字符串不是输入的一部分
  • 部分匹配不计算在内,必须匹配完整输入,

我会去

^(.*\.(?!js|css|svg|ico|jpg|html))?[^.]*$

这个怎么运作:

  1. 贪婪的星.*立即前进到字符串的末端。
  2. \.从字符串末尾回溯到第一个点。
  3. 前瞻禁止某些文件扩展名。
  4. 表达式的整个前面部分是可选的,因此我们可以匹配不包含点的字符串。
  5. 匹配字符串的[^.]*$其余部分(允许的文件扩展名)以实现整体匹配。

推荐阅读