Nginx位置匹配扩展中的正则表达式不带“解析”

 收藏

我不是正则表达式中的上帝,并且坚持使用复杂的位置正则表达式。

我的nginx配置中有一个位置块,以确保图像和其他媒体被缓存。但是,如果URL中包含“ resolve”,则不应匹配并跳过该块。我无法正常工作。我从开始就看过负面看法,但我想我还不完全了解它是如何工作的。

这是我的障碍:

location ~* \.(?:css|js|gif|jpeg|jpg|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { //caching stuff }

它应与以下URL匹配:

/media/cache/ps_product_admin_thumb/productimages/image.jpg

但不是以下内容:

/media/cache/resolve/ps_product_admin_thumb/productimages/image.jpeg

有人可以将我送往正确的方向吗?

回复
  • emagni 回复

    前瞻可能会有所帮助:

    ^(?!.*resolve).*\.(?:css|js|gif|jpeg|jpg|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$
    

    (?!.*resolve) makes sure no resolve exists in the string.

    See proof & explanation