1

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

有人看到有什么问题吗?

4

1 回答 1

1

那是因为你把前瞻断言放在了错误的地方

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

当你把它放在点之前,它会从那个位置向前看,它看到的只是文件扩展名,不是“nocache”,所以这是真的。

在我的表达式中,它位于锚点之后并有自己的.*,因此如果字符串中的任何位置都有“nocache”,它将从字符串的开头开始查找。

于 2013-05-02T12:08:27.597 回答