我有一个Tomcat服务器,它正在为Spring MVC应用程序提供服务。
我想为某个路径实现一个静态servlet,并希望它的行为等同于nginx try_files
指令:
...
root /my/path/to/app
location /app {
try_files $uri $uri/ /index.html;
}
...
对于那些不熟悉nginx的人:
我希望servlet将/app
路径直接Map到/webapp/app
目录。如果它在目录中找到与请求匹配的静态文件,很好,返回该内容。否则返回/webapp/app/index.html
文件。
例如,如果我的目录如下所示:
/webapp
/app
index.html
existing-file.js
/sub-dir
file.js
那么......
mydomain.com/app returns /webapp/app/index.html
mydomain.com/app/index.html returns /webapp/app/index.html
mydomain.com/app/non-existant-file returns /webapp/app/index.html
mydomain.com/app/existing-file.js returns /webapp/app/existing-file.js
mydomain.com/app/sub-dir/file.html returns /webapp/sub-dir/file.html
2条答案
按热度按时间c8ib6hqw1#
从Spring应用程序服务VueJS前端也有同样的问题。我使用HTML5历史模式,所以URI可以包含一些由前端管理的路径。Spring应用程序只服务
/api/**
端点。AFAIK,try_files没有直接等效项。
基本的想法是创建额外的Map,在任何请求到“前端”路径时返回“index.html”。我不知道如何为
/**
创建Map并给予它最低的优先级-这是与nginx的主要区别,nginx选择最具体的匹配规则。因此,我创建了一个Map,它符合除
/api/**
、/js/**
、/css/**
、/fonts/**
和index.html本身之外的所有路径。wlwcrazw2#
我认为最接近try_files的是让Sping Boot 尝试为文件提供服务,但如果找不到,则会提供一个错误页面,该页面可以重定向到其他页面,例如:index.html