如何配置NGinx将通配符样式的URL指向同一文件系统路径

时间:2012-05-21 02:37:16

标签: nginx

我想使用网址的一部分来帮助缓存清除和跟踪我的应用程序中使用的资源版本

也就是说,我有一个网络应用程序,它的资源保持独立并由nginx提供服务。资源保存在文件夹中:

app_name/img/sprites.png
app_name/css/compressed.css
app_name/scripts/mini.app.js

我想用以下形式的uris来引用这些:

/app_name/#{version}/img/sprites.png

或者

/#{version}/app_name/img/sprites.png

其中#{version}是要加载的资源的版本。

然后,我希望始终将资源保存在文件系统中的相同位置,并使用nginx始终指回相同的文件。

1 个答案:

答案 0 :(得分:4)

假设您只想要这三个子目录,如果找不到资源则返回404,您可以使用regex locationtry_files执行此操作:

# /app_name/#{version}/img/sprites.png urls:
location ~ ^/app_name/[^/]+(?<resource>/(img|css|scripts)/.+) {
  try_files /app_name$resource =404;
}

# /#{version}/app_name/img/sprites.png urls:
location ~ ^/[^/]+(?<resource>/app_name/(img|css|scripts)/.+) {
  try_files $resource =404;
}

如果您希望位置匹配任何目录而不是列出的三个,您可以用[^ /] +替换(img | css | scripts)。