正则表达式匹配文件扩展名同时忽略查询字符串

Regex to match file extension while ignoring query string

我想构建一个 IIS url 重写规则来匹配多个文件扩展名但忽略查询字符串。

样本:

/hello.html // Match
/test?qs=world.html // Should not match
/test?qs=world.html&qs2=x // Should not match

以下是我使用的无法正常工作的内容:

<add matchType="Pattern" input="{HTTP_URL}" pattern=".+\.(js|css|less|html|eot|svg|ttf|woff|json|xml)$" negate="true" /> <!--Any url with a dot for file extension-->

使用\w+代替.+ .....................(\w等同于[a-zA-Z0-9_]) :

<add matchType="Pattern" input="{HTTP_URL}" pattern="\w+\.(js|css|less|html|eot|svg|ttf|woff|json|xml)$" negate="true" /> <!--Any url with a dot for file extension-->

如果你想允许其他字符(未包含在 \w 中)并且仍然忽略查询字符串,你可以使用 [^?]+ 而不是 .+

看看这是否适合你:

我写在javascript,(我不知道IIS)但是正则表达式总是相似的

    /^.*\/[\w]+\.[\w]{2,4}$/.test('/test?qs=world.html') // return false
/^.*\/[\w]+\.[\w]{2,4}$/.test('/world.html') // return true

也许它可以作为:

    <add matchType="Pattern" input="{HTTP_URL}" pattern="^.*\/[\w]+\.[\w]{2,4}$" negate="true" />

但我将扩展名作为通用方式。如果要对扩展进行白盒测试,可以替换为:

^.*\/[\w]+\.(js|css|less|html|eot|svg|ttf|woff|json|xml)$

我假设这在 IIS 中有效:^[^?]*$ 将匹配任何不包含 ?.

的字符串