配置 nginx 以重写所有路径上的哈希值
Configure nginx to rewrite hashes on all paths
我首先使用 nginx 作为静态文件服务器,如果它们包含指向模拟目录的散列,则尝试重写所有 uri。
举个例子可能更清楚
假设用户请求页面 url 如下:
/api/some/path/to/ecbac7cb-21ca-3d22-98ed-4d063f138d0b/some/other/path/02167621-5c01-45c5-98ba-eb3ba1bf4b2a/list
/api/some/other/path/to/ecbac7cb-21ca-3d22-98ed-4d063f138d0b
我想先尝试获取文件,但后备方案是这样的
/api/some/path/to/__any_hash__/some/other/path/__any_hash__/list.json
/api/some/other/path/to/__any_hash__.json
这是我试过的配置...但很明显,它不起作用。
server {
...
location /api {
try_files $uri $uri/index.html $uri.html $uri.json $uri.xml @rewrites;
}
location @rewrites {
rewrite /([0-9\-a-f]{36})/ __any_hash__ break;
try_files $uri.xml $uri.json @backend;
}
有人有想法吗?
您的 location @rewrites
可能看起来像这样:
location @rewrites {
rewrite "^(.*)/[0-9\-a-f]{36}(/.*)$" /__any_hash__ last;
return 404;
}
</code> 和 <code>
捕获要替换的哈希前后的 URI 片段。 last
导致 location /api
在替换后重新尝试。该过程将循环,直到完成所有替换。 return 404
只有在完全替换的 URI 找不到文件时才会调用。
我首先使用 nginx 作为静态文件服务器,如果它们包含指向模拟目录的散列,则尝试重写所有 uri。
举个例子可能更清楚
假设用户请求页面 url 如下:
/api/some/path/to/ecbac7cb-21ca-3d22-98ed-4d063f138d0b/some/other/path/02167621-5c01-45c5-98ba-eb3ba1bf4b2a/list
/api/some/other/path/to/ecbac7cb-21ca-3d22-98ed-4d063f138d0b
我想先尝试获取文件,但后备方案是这样的
/api/some/path/to/__any_hash__/some/other/path/__any_hash__/list.json
/api/some/other/path/to/__any_hash__.json
这是我试过的配置...但很明显,它不起作用。
server {
...
location /api {
try_files $uri $uri/index.html $uri.html $uri.json $uri.xml @rewrites;
}
location @rewrites {
rewrite /([0-9\-a-f]{36})/ __any_hash__ break;
try_files $uri.xml $uri.json @backend;
}
有人有想法吗?
您的 location @rewrites
可能看起来像这样:
location @rewrites {
rewrite "^(.*)/[0-9\-a-f]{36}(/.*)$" /__any_hash__ last;
return 404;
}
</code> 和 <code>
捕获要替换的哈希前后的 URI 片段。 last
导致 location /api
在替换后重新尝试。该过程将循环,直到完成所有替换。 return 404
只有在完全替换的 URI 找不到文件时才会调用。