【问题标题】:How to generate complex url like stackoverflow?如何生成像stackoverflow这样的复杂url?
【发布时间】:2011-01-15 08:13:53
【问题描述】:

我正在使用 playframework,我希望生成像 stackoverflow 这样的复杂 url。比如我想生成一个问题的url:

http://aaa.com/questions/123456/How-to-generator-a-complex-url

注意最后一部分,它是问题的标题。

但我不知道该怎么做。

更新

在playframework中,我们可以在conf/routes文件中定义路由,我做的是:

GET /questions/{<\d+>id} Questions.show

这样,当我们在视图中调用@{Questions.show(id)}时,会生成:

http://aaa.com/questions/123456

但是如何让生成的有title部分,很难。

【问题讨论】:

    标签: url playframework


    【解决方案1】:

    使用 playframework 很容易生成这样的 url。在您的路线文件中添加以下内容:

    GET /questions/{id}/{title}       YourController.yourMethod
    

    查看 playframework 站点中关于路由的文档了解更多信息

    在您的 html 页面中:

    <a href="@{YourController.yourMethod(id,title.slugify())}">
    

    JavaExtensions 中的 slugify 方法,从保留字符中清除标题 (see doc)

    【讨论】:

      【解决方案2】:

      它是一个服务器端 url 重写器。在这种情况下,输入{...}/questions/4698625/how-to-generate-complex-url-like-stackoverflow{...}/questions/4698625 并不重要——它们都重定向到相同的内容。所以这个后缀只是用来增加 url 的可读性。

      要查看有关 url 重写的更多详细信息,请参阅this post

      统一更新: 生成这样的后缀,

      1. 取内容的标题,
      2. 将多个空格缩小为单个
      3. 用破折号 (-) 替换所有空格
      4. 从标题中删除所有非字母符号

      最好使用正则表达式执行此操作

      【讨论】:

      • 谢谢,但困难的部分是如何在 playframework 中做到这一点。
      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 2011-05-11
      • 2012-07-29
      • 2011-10-02
      相关资源
      最近更新 更多