正则表达式否定字符串nocache不起作用

时间:2013-05-02 12:05:16

标签: regex apache browser-cache regex-negation regex-lookarounds

我正在尝试在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”字样的文件也被缓存。

有人看到了什么问题吗?

1 个答案:

答案 0 :(得分:1)

那是因为你把先行断言置于了错误的地方

^(?!.*nocache).*\.(png|bmp|jpg|gif|html|htm|css|js|ttf|svg|woff|txt)$

当你把它放在点之前时,它将从前面的位置看,它看到的只是文件扩展名,不是“nocache”,所以它是真的。

在我的表达式中,它被放置在锚之后并且有自己的.*,所以如果字符串中的任何地方都有“nocache”,它将从字符串的开头看。