忽略 Ngnix 中的位置段来提供静态文件

忽略 Ngnix 中的位置段来提供静态文件

我的应用程序生成静态 URL,例如:

/nhub/public/static/A8Ec-8B33/css/styles.css
/nhub/public/static/A8Ec-8B33/favicon.ico

应用程序更新后,它会生成与以下相同的 URL:

/nhub/public/static/X53L-SbTy/css/styles.css
/nhub/public/static/X53L-SbTy/favicon.ico

每个版本的应用程序都会独特地生成A8Ec-8B33这些片段。X53L-SbTy

对于这两种情况,我希望 NGINX 指向相同的底层文件:

D:\sitenhub\sitestatic\css\styles.css
D:\sitenhub\sitestatic\favicon.ico

我试过:

location ~ ^/nhub/public/static/[^\/]+/ {
  alias D:/sitenhub/sitestatic/;
}

403 forbidden上面的例子却不行。希望得到帮助。

答案1

来自NGINX文档:

如果在使用正则表达式定义的位置内使用别名,则该正则表达式应该包含捕获,并且别名应该引用这些捕获(0.7.40),例如:

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

所以最终这对我有用:

# Nginx
location ~ ^/nhub/public/static/[^/]+/(.*)$ {
  alias D:/sitenhub/sitestatic/$1;
}
# Apache HTTPD
AliasMatch "^/nhub/public/static/[^/]+/(.*)$" "D:/sitenhub/sitestatic/$1"

[^/]+匹配至少一个不是的字符/(.*)是匹配零个或多个任意字符的捕获组,这个捕获组$1别名

相关内容