2012-08-12 56 views

回答

5

我问在play's discussion group和他们帮助我实现这个最初版本

我创建了一个PrefixedRequest这样

import play.api.mvc.RequestHeader 
import play.api.Play.configuration 

import play.api.Play.current 

class PrefixedRequest(request: RequestHeader) extends RequestHeader { 

    def headers = request.headers 
    def queryString = request.queryString 

    // strip first part of path and uri if it matches http.path config 
    def path = ("^" + prefix).r.replaceFirstIn(request.path, "/") 
    def uri = ("^" + prefix).r.replaceFirstIn(request.uri, "/") 

    def method = request.method 
    def remoteAddress = request.remoteAddress 

    lazy val prefix = { 
     val config = configuration.getString("http.path").getOrElse("") 
     if (config.endsWith("/")) config else config + "/" 
    } 
} 

object PrefixedRequest { 
    def apply(request: RequestHeader) = new PrefixedRequest(request) 
} 

然后,我用它在Global.scala

import play.api.GlobalSettings 
import play.api.mvc.RequestHeader 
import play.api.mvc.Handler 

object Global extends GlobalSettings { 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    super.onRouteRequest(PrefixedRequest(request)) 
    } 

} 

finnally添加this to application.conf

http.path=/prefix/ 

它似乎工作,但我没有找到如何将这个前缀添加到相反的路线......任何人都可以在这部分手?

-

一些有用的链接

选中此threaddocs

+0

显然,这些功能将不会包含在版本2.1之前 - https://github.com/playframework/Play20/commit/da6bbc4 – opensas 2012-08-13 01:32:45

+0

它可能对i18n很好(/ fr,/ en ...) – iwalktheline 2012-08-13 10:14:09

+1

我认为你最好扩大http://www.playframework.org/documentation/api/2.0/scala/play/api/mvc/WrappedRequest.html – Drew 2012-10-16 13:05:10

25

在玩2.1,你可以做到这一点与在conf/application.conf以下选项:

application.context="/your/prefix" 

从游戏2.4这个属性叫做play.http.context(取自Gman的评论)。

+1

这比接受的答案要容易得多(这可能没有奏效在播放2.0) – Nathan 2014-09-15 10:03:19

+0

这是正确的答案 – 2015-10-04 16:42:34

+3

只是让其他人来自谷歌知道,在播放2.4它改为'play.http.context'(见https://www.playframework.com/documentation/2.4。 X/Migration24) – Gman 2015-12-10 10:41:52