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

时间:2015-06-09 19:57:47

标签: regex iis url-rewrite-module

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

样品:

/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-->

3 个答案:

答案 0 :(得分:2)

使用\w+代替.+ .................(\w相当于[a-zA-Z0-9_]):< / p>

<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中)且仍然忽略查询字符串,则可以使用[^?]+代替.+

答案 1 :(得分:0)

看看这是否适合你:

我用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)$

答案 2 :(得分:0)

我认为这可以在IIS中使用:^[^?]*$将匹配任何不包含?的字符串。