我有一些GUI,它们都属于一般的TTP子域,并且都允许深层链接。具体来说,URL / TTP / app / site /应该使用 site 的统计信息加载名为 app 的GUI。使用/ ttp / app 使用默认站点加载相同的GUI。
这可以通过将/ ttp / app 和/ ttp / app / site / requests重定向到/ usr / share / html / ttp / app /index.html页面,该页面将解析剩余的网址,并确定在提供网站时支持哪个支持。
目前我的conf文件中有类似的内容(我正在使用嵌套位置来处理此处未包含的其他内容):
location /ttp {
root /usr/share/nginx/html/ttp/;
location ~ ^/foo/ {
try_files $uri $uri/ /foo/index.html;
}
location ~ ^/bar/ {
try_files $uri $uri/ /bar/index.html;
}
... (one for each app)
}
这有效,但多余。我正在尝试使用正则表达式来整合它,这将覆盖所有具有单个位置的应用程序。我已经尝试了一些变体,最初的问题是贪婪的正则表达式抓住所有/ app / 网站 /而不仅仅是/ app /。非贪婪正则表达式的最佳尝试
location /ttp {
index index.html
root /usr/share/nginx/html/ttp/
location ~ ^/((?U).*)/ {
try_files $uri /$1/index.html;
}
}
这给我一个关于重写或内部重定向周期的错误,同时内部重定向ti“/ttp/index.html”这似乎意味着它不够贪婪并且完全忽略了 app ,其中$ 1是一个null string。
是否有一些干净的方法来执行此操作,使用正则表达式或某些我不知道的指令?
答案 0 :(得分:1)
您的示例存在缺陷 - 我认为您对其进行了简化,我们错过了在/ttp
块进入外部location
块后删除/ttp/foo/xxx
前缀的部分。
您有一个URI结构/ttp/foo/index.html
,您希望默认操作为foo
,其中[^/]
是应用的名称。
您可以使用非贪婪的正则表达式,但您可能会发现try_files
字符类更容易用于匹配URI中的各个路径元素。
如果location /ttp {
root /usr/share/nginx/html;
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^(/ttp/[^/]+)/ $1/index.html last;
return 404;
}
语句的最后一个元素需要重写,请使用命名位置。有关详情,请参阅this document。
例如:
/ttp/foo/xxx
采用默认操作的location /ttp
形式的任何URI都将重新输入/ttp/foo/index.html
块,其URI为root
。 Users - user_id, username, pass, data, etc...
Devices - device_id, user_id (owner), device_data....
OpRecords - record_id, device_id, record_data_stuff...
参数以URI为前缀以形成本地路径。