验证除特定扩展名以外的所有内容的正则表达式

Regex that validates for everything except particular extension names

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

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

问题是现在任何具有双重扩展名的东西,例如.min.css.min.js 将使正则表达式失败。

我试过以下但没有用:

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

非常感谢任何帮助和指导

在以下假设下

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

我会选择

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

工作原理:

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