我如何让Tomcat在URL中没有/static/的情况下提供静态内容?
我有一个Tomcat服务器,在那里我只想提供来自根应用程序的静态内容。标准是将foo.html这样的文件放入我如何让Tomcat在URL中没有/static/的情况下提供静态内容?,tomcat,Tomcat,我有一个Tomcat服务器,在那里我只想提供来自根应用程序的静态内容。标准是将foo.html这样的文件放入webapps/ROOT/static文件夹,然后使用http://myserver:8080/static/foo.html. 如何将其配置为从公共URL中删除/static/部分,但仍允许我将所有静态内容放在静态文件夹中 (我有很多文件中都有完整的路径引用,我不能轻易更改,比如带有src=“/js/somefile.js”)的JavaScript,所以我不想为了在开头添加/static
webapps/ROOT/static
文件夹,然后使用http://myserver:8080/static/foo.html.
如何将其配置为从公共URL中删除/static/
部分,但仍允许我将所有静态内容放在静态文件夹中
(我有很多文件中都有完整的路径引用,我不能轻易更改,比如带有src=“/js/somefile.js”
)的JavaScript,所以我不想为了在开头添加/static而更新它们)
我希望服务器解释该
http://myserver:8080/foo.html
意味着在webapps/ROOT/static
中找到它。但是我想要一个像http://myserver:8080/myotherapp/bar.html
要继续使用webapps/myotherapp/
解析,Tomcat有一个类似于Apache的mod_rewrite
的RewriteValve
。您可以将其用于两个方面:应用程序级别或虚拟主机级别
要将阀添加到ROOT
应用程序,请将阀添加到ROOT/META-INF/context.xml
文件:
<Context>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
PS:调试重写规则可能会令人沮丧,因此:
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].rewrite.level = FINE
在Tomcat的
日志中。属性可以提供帮助。你有什么理由不想直接将静态文件放入$CATALINA_BASE/webapps/ROOT
中吗?我确实这样做了,但我有点想有一个目录,我可以隔离并设置权限,这样我的UI程序员就可以只写这些文件了,用户不能删除非空目录,因此具有webapps/ROOT/WEB-INF
写入权限但没有webapps/ROOT/WEB-INF
写入权限的用户不能触摸webapps/ROOT
<代码>http://myserver:8080/myotherapp/
仍将解析为webapps/myotherapp/
,即使存在/webapps/ROOT/myotherapp/
。
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].rewrite.level = FINE