我希望我的应用中的每个用户都拥有http://user1.example.com格式的专用虚荣网址。如何在Play应用程序中实现此功能。 谢谢。
答案 0 :(得分:2)
您可以使用虚拟主机。从Play 1.1的发行说明:
routes文件现在支持主机匹配。如果必须从host参数中提取操作参数,这可能很有用。例如,对于SAAS应用程序,您可以使用:
GET {client}.mysoftware.com/ Application.index
然后自动检索客户端值,与任何其他请求参数一样:
public static void index(String client) {
...
}
应该这样做。
答案 1 :(得分:2)
在控制器方法中,您可以从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 ...
}
答案 2 :(得分:0)
我获取了空值,域名一直在更改为localhost:9000,直到我在apache配置(httpd.conf)文件中使用ProxyPreserveHost on
解决它