如何在我的播放应用程序中实现虚荣网址?

时间:2011-10-17 11:18:34

标签: playframework subdomain

我希望我的应用中的每个用户都拥有http://user1.example.com格式的专用虚荣网址。如何在Play应用程序中实现此功能。 谢谢。

3 个答案:

答案 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解决它