【发布时间】:2012-02-08 09:10:31
【问题描述】:
我的 Play 需要一个绝对 URL! 1.2.4 应用程序作为 OAuth 身份验证的回调(使用Scribe。
我的应用程序在 Apache 虚拟代理后面运行,可以通过带有子域的 URL 访问,例如“http://myapp.mydomain.com”,代理“http://127.0.0.1:9000”。 ProxyPreserveHost 设置为 On。在我的游戏中!应用程序配置,我有以下属性:application.baseUrl=http://myapp.mydomain.com/.
为了计算这个绝对 URL,我使用了如下代码:
Router.ActionDefinition ad = Router.reverse("Controller.callback");
ad.absolute();
return ad.url;
这段代码在 Play 中运行良好! 1.2.3:它返回“http://myapp.mydomain.com/callback”。
现在我使用 Play! 1.2.4,这段代码现在返回“http://www.mydomain.com:9000/callback”(没有子域的虚拟代理翻译的URL),好像玩!现在使用 HTTP 请求的 URL 来构建这个绝对 URL。
我凭经验将此代码替换为 Router.getFullUrl("Controller.callback"),这解决了我的问题。
这两种方法 Router.getFullUrl() 和 Router.absolute() 没有记录(嘘!),我想知道理解我的问题的细微差别。
我想Router.absolute() 使用当前HTTP 请求来构建绝对URL,Router.getFullUrl() 使用application.baseUrl 配置属性。
我也可能有 Apache 配置问题(因为这显然不是我的技能之一!),但是将 ProxyPreserveHost 设置为 On,我认为我的虚拟代理对 Play 是透明的!应用程序,我不明白为什么从 Play 切换时会出现! 1.2.3 到 1.2.4。
感谢您的帮助。
【问题讨论】:
标签: apache2 playframework