在Apache配置文件中,有一行可以避免对图像进行gzip压缩:
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
我认为不存在.gif
文件名,如myfile.*:gif
。
那么?:
是什么意思?
答案 0 :(得分:10)
此特定部分(?:gif|jpe?g|png)
几乎与(gif|jpe?g|png)
完全相同。
这里的区别在于第一个不会在括号中“捕获”该组。换句话说,在查看匹配时,第一个示例中的内容将不会作为特殊组包含在内。
通常,当您将项目括在括号中时,它被称为“捕获组”。换句话说,当查看将正则表达式与文本匹配的结果时,括号中的内容将被放入“组”中以便稍后检查。当您使用(?:stuff)
时,括号内的内容仍然在正则表达式中组合在一起,但它不被视为捕获组。
如果你想匹配一堆图像的文件名,机器人不能捕获超过文件名的内容,这会很有用:
"([^.]\.)(?:gif|png|tiff)"
将文件与此正则表达式匹配时,只会捕获文件名。文件扩展名不会是因为它不在捕获组中。