我的Play上需要一个绝对的URL!1.2.4应用程序作为OAuth身份验证的回调(使用Scribe.
我的应用程序在Apache虚拟代理后面运行,可通过带有"http://myapp.mydomain.com"等子域的URL访问,代理"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;
Run Code Online (Sandbox Code Playgroud)
这段代码适用于Play!1.2.3:它返回"http://myapp.mydomain.com/callback".
现在我用Play了!1.2.4,此代码现在返回"http://www.mydomain.com:9000/callback"(由虚拟代理翻译的URL没有子域名),就好像Play!现在使用HTTP请求的URL来构建此绝对URL.
我凭经验将这个代码替换为Router.getFullUrl("Controller.callback"),这解决了我的问题.
这两种方法Router.getFullUrl()并Router.absolute()没有记录(booo!),我想知道解决我的问题的微妙差异.我想Router.absolute()使用当前的HTTP请求来构建绝对URL,并Router.getFullUrl()使用application.baseUrl配置属性.我也可能有Apache配置问题(因为它显然不是我的技能之一!),但是ProxyPreserveHost设置为On,我认为我的虚拟代理对Play来说是透明的!应用程序,我不明白为什么它从Play切换时出现!1.2.3至1.2.4.
谢谢你的帮助.