【发布时间】:2012-02-20 21:27:13
【问题描述】:
我希望我的应用程序上的每个用户都有一个专用的个性化 URL,格式为 http://user1.example.com。如何在 Play 应用程序中实现这一点。 谢谢。
【问题讨论】:
我希望我的应用程序上的每个用户都有一个专用的个性化 URL,格式为 http://user1.example.com。如何在 Play 应用程序中实现这一点。 谢谢。
【问题讨论】:
您可以使用虚拟主机。来自 Play 1.1 的发行说明:
路由文件现在支持主机匹配。如果必须从主机参数中提取操作参数,这将很有用。例如,对于 SAAS 应用程序,您可以使用:
GET {client}.mysoftware.com/ Application.index
然后像任何其他请求参数一样自动检索客户端值:
public static void index(String client) {
...
}
应该可以的。
【讨论】:
在控制器方法中,您可以从 request.domain 变量中获取域名。然后,您可以使用以下内容从域名中解析用户名或您想使用的任何标识符:
int endIndex = request.domain.indexOf(".example.com");
if (endIndex <= 0) {
return null;
}
String subdomain = request.domain.substring(0, endIndex);
如果你打算在几个方法中使用这个子域检查,你可以做一个单独的域检查方法,带有@play.mvc.Before注解,并将用户对象放到renderArgs中,以便以后在实际调用的控制器方法和模板中使用:
@Before
public static void resolveUserSubdomain() {
... Check subdomain and find user ...
renderArgs.put("user", user);
}
您还可以将此域检查器添加到单独的控制器类中,并通过使用该类的 @play.mvc.With 注释将其包含在您需要它的每个控制器中。
@With({ExampleDomainCheck.class})
public class ExampleController extends Controller {
... Controller methods ...
}
【讨论】:
我得到空值并且域名一直更改为 localhost:9000 直到我在 apache 配置 (httpd.conf) 文件中使用 ProxyPreserveHost on 解决了它
【讨论】: