Play 2.1.x默认的全局路由

6

在Play框架中是否有默认的全局路由?如果有,如何在我的路由文件中进行配置?目前,有一些URL我不希望用户使用,即使他们访问这些URL,我也不想让错误页面出现,而是要将他们重定向到我的Web应用程序的首页!在路由配置文件中有没有办法实现这一点?

2个回答

8
只需在您的路由(routes)文件结尾定义一个匹配所有路径的路由即可。但是不要忘记为您的资源(asset)定义特定的路由,例如:
GET   /               controllers.Application.index
GET   /some/path      controllers.Application.someHandler
...

# End of file
GET   /favicon.ico    controllers.Assets.at(path="/public", file="img/favicon.ico") 
GET   /$file<(css|img|js|partials)/.*>    controllers.Assets.at(path="/public", file) 
GET   /$path<.*>      controllers.Application.catchall(path)

任何之前规则没有匹配的URL都将被此规则匹配。

1
$符号代表什么?<.*>又代表什么? - joesan
1
请参阅“使用自定义正则表达式的动态部分”文档(http://www.playframework.com/documentation/2.1.x/ScalaRouting),其中`$id<regex>定义了一个名为“id”的动态部分,其必须匹配regex。在这里,$path<.*>`是一个名为“path”的动态路径,可以匹配任何字符串。 - Nicolas Cortot

4
当您想要手动解析路径(例如在自定义操作中手动解析)时,捕获所有路由是有意义的;否则,在您的全局对象中使用常见的onHandlerNotFound就足够了,并将请求重定向到任何您想要的地方。

全局设置似乎是一个有趣的东西。在你提到的链接中,它说 GlobalSettings.scala 应该位于默认包中,但我也可以从 application.conf 目录中引用它。那么,在这种情况下,我可以将它放在我自己方便的包中吗? - joesan
1
我实际上尝试过了,但一直遇到错误。这是我做的:23 override def onHandlerNotFound(request: RequestHeader): Result = { 24 NotFound(25 views.html.defaultpages.notFound(request, None)26 )27 } 以上调用的结果显示具有不兼容的类型。 - joesan
但是,当我按照文档中所述进行操作时:NotFound( views.html.notFoundPage(request.path) ),我收到了一个编译错误,说找不到notFoundPage。我应该写那个notFoundPage吗? - joesan
当然,只需创建自己的视图,并使用常见的模板渲染方式即可。 - biesior
编译器警告我使用依赖注入而不是全局对象。 - Chris Prince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接