使用Restlet我需要在与Web服务相同的上下文中提供一些简单的静态内容。我已经使用Directory
配置了该组件,但在测试中,我发现它只会提供'index.html',其他所有内容都会产生404.
router.attach("/", new Directory(context, new Reference(baseRef, "./content"));
所以...... http://service和http://service/index.html都有效,
但是http://service/other.html给了我一个404
有人可以对此有所了解吗?我希望./content目录中的任何文件都可用。
PS:我最终计划使用反向代理并从另一个Web服务器上提供所有静态内容,但是现在我需要它按原样工作。
答案 0 :(得分:2)
好吧,我弄明白了这个问题。实际上,Restlet似乎基于前缀路由请求,但是没有正确处理最长匹配前缀,它似乎也忽略了文件扩展名。
例如,如果我将资源附加到“/ other”...和“/”上的目录。我请求/other.html,实际发生的是我获得“/ other”资源。 (扩展名被忽略?),而不是我期望的目录中的静态文件。
如果aynone知道为什么会这样,或者如何改变它,我很想知道。这不是什么大问题,只是为了测试。我认为无论如何我们都会在生产中使用apache或nginx。
答案 1 :(得分:2)
默认情况下,Restlet中的路由器使用“Template.MODE_STARTS_WITH”匹配模式。您始终可以通过执行router.setMatchingMode(Template.MODE_EQUALS)来设置路由器默认值。这将默认为附加打开严格匹配。您可以选择使用setMatchingMode覆盖单个路径。