【问题标题】:How do I implement vanity url in my play application?如何在我的 play 应用程序中实现虚 url?
【发布时间】:2012-02-20 21:27:13
【问题描述】:

我希望我的应用程序上的每个用户都有一个专用的个性化 URL,格式为 http://user1.example.com。如何在 Play 应用程序中实现这一点。 谢谢。

【问题讨论】:

    标签: playframework subdomain


    【解决方案1】:

    您可以使用虚拟主机。来自 Play 1.1 的发行说明:

    路由文件现在支持主机匹配。如果必须从主机参数中提取操作参数,这将很有用。例如,对于 SAAS 应用程序,您可以使用:

    GET    {client}.mysoftware.com/         Application.index
    

    然后像任何其他请求参数一样自动检索客户端值:

    public static void index(String client) {
        ...
    }
    

    应该可以的。

    【讨论】:

    • 我通过我的本地主机上的两个解决方案获得空值,并在 httpd.conf 中指定了虚拟主机:pastebin.com/2NBewFVF
    • @SameerSegal 抱歉看不到错误。如果没有虚拟主机,你可以试试吗?
    • @SameerSegal 太棒了!请将其添加为答案并接受它,以便其他人可以看到解决方案:)
    【解决方案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 ...
    }
    

    【讨论】:

      【解决方案3】:

      我得到空值并且域名一直更改为 localhost:9000 直到我在 apache 配置 (httpd.conf) 文件中使用 ProxyPreserveHost on 解决了它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 2017-01-05
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多