如何生成像stackoverflow这样的复杂url?

时间:2011-01-15 08:13:54

标签: url playframework

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

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

但如何让生成的标题部分很难。

2 个答案:

答案 0 :(得分:11)

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

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

请参阅playframework网站上有关路由的文档以获取更多信息

在你的html页面中:

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

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

答案 1 :(得分:2)

服务器端网址重写器。如果是SO,则输入{...}/questions/4698625/how-to-generate-complex-url-like-stackoverflow{...}/questions/4698625并不重要 - 它们都会重定向到相同的内容。因此,此后缀仅用于提高URL的可读性。

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

<强> UPD: 生成这样的后缀,

  1. 获取内容的标题,
  2. 将多个空格缩小为单个
  3. 用短划线( - )
  4. 替换所有空格
  5. 从标题中删除所有非字母符号
  6. 最好使用正则表达式执行此操作