我正在尝试在apache中构建一个正则表达式,它与扩展名为.html,.css,.js,.jpg等的所有文件匹配...除了url有“nocache”这个词
我已经读过stackoverflow中的其他条目,并且我创建了以下常规表达式
<FilesMatch "^(.*(?!nocache)\.(png|bmp|jpg|gif|html|htm|css|js|ttf|svg|woff|txt))$">
ExpiresActive on
ExpiresDefault "now plus 1 month"
</FilesMatch>
问题是这个正则表达式工作不正常。所有带扩展名的文件都被缓存,但带有“nocache”字样的文件也被缓存。
有人看到了什么问题吗?
答案 0 :(得分:1)
那是因为你把先行断言置于了错误的地方
^(?!.*nocache).*\.(png|bmp|jpg|gif|html|htm|css|js|ttf|svg|woff|txt)$
当你把它放在点之前时,它将从前面的位置看,它看到的只是文件扩展名,不是“nocache”,所以它是真的。
在我的表达式中,它被放置在锚之后并且有自己的.*
,所以如果字符串中的任何地方都有“nocache”,它将从字符串的开头看。