下面几种路由设计有什么区别?

例如我有个社区网站

现在针对用户主页有如下几种路由设计

  • www.xxx.com/member/{username} (知乎,V2EX,sf.gg,豆瓣采用)
  • www.xxx.com/{username} (Twitter,github采用)
  • member.xxx.com/{username} (bilibili采用)
  • {username}.member.xxx.com (LOFTER采用)
  • www.xxx.com/profile.php?id={username} (Facebook,百度贴吧采用)

同时针对UGC内容有如下几种路由设计

  • www.xxx.com/{username}/{article_id} (github采用)
  • www.xxx.com/article/{article_id} (bilibili,知乎问答主站,豆瓣采用)
  • www.xxx.com/{article_id} (简书采用)
  • article.xxx.com/{article_id} (知乎专栏采用)
  • www.xxx.com/article.php?id={article_id} (老旧CMS采用)

哪种更好呢?

这个和SEO关系大吗?

从代码可维护角度上考虑呢?(比如说DNS,跨域cookie,session管理等问题)

各方面综合考虑该使用什么样的路由设计方案?

阅读 2.9k
3 个回答
  • 对于 SEO 几乎没影响,之前有传言说 article.php?id={article_id} 类似于这样的URL 不利于 SEO ,这个也有待进一步证实,至于 {username}.member.xxx.com 就类似于站群策略。
  • 代码可维护方向的影响几乎可以不计
  • 综合考虑 应该选择最合适业务。

最合适自己业务的

  • www.xxx.com/member/{username} (知乎,V2EX,sf.gg,豆瓣采用)

就拿这个来说,因为这些网站的业务,不仅仅局限于用户,或者说,用户主页不是第一位,亦或者更加明理的分层符合传统业务的目录分层的 url 样式,按照模块这样分下去。

  • www.xxx.com/{username} (Twitter,github采用)

像这种,从 URL 角度来讲,就很明显 这个是以用户为核心的,包括像国内很多直播平台也是,直接就是主域 + 用户ID/用户名

  • member.xxx.com/{username} (bilibili采用)

而这种,大部分情况都是存在于多个站点,其中有专门的 SSO 服务器,用户服务器,比如 QQ 。

  • {username}.member.xxx.com (LOFTER采用)

要知道 LOFTER 是画师用,也是由网易博客的另一个版本而来,博客作为个人的主页,很多人都是希望自己有一个单独的域名,而不是和别人共享路径。

  • www.xxx.com/profile.php?id={username} (Facebook,百度贴吧采用)

这种基本就是传统的形式,没有来得及与时俱进,或者因为成本和利益无法达到一定点,所以改与不改都无所谓,可以通过 URL 重写来快速实现,很多网站都是这样,包括著名的 Discuz 论坛,在没有开启 URL 重写前都是这种 URL ,还有 DeDeCMS。

总结

换句话说,就自己业务最看重哪一块,就最宜用那一块来做短路径,具有标志性,如果模块比较多就应该做带有模块的,比如 sf 的 URL ,比如 Bilibili 的 Av 号,国内众多直播平台的房间号。

可以在一定程度上以加深用户记忆。

1,给人看的,需要URL简洁的,语义明确的, 符合这些最基本的前提可以使用这种 www.xxx.com/{username}/{article_id}
缺点:参数在url中,不是传统的query string,需要服务器支持,增加开发量

2,不是给人看的,那就随意了,建议www.xxx.com/article.php?id={article_id} 传统形式参数,兼容性好,服务器都支持,

3,综合一点,面向用户编程,

新手上路,请多包涵
路由设计完全可以参考REST来书写,名词+HTTP动词,路由可读性贼鸡儿强,就像亚索的风墙。
不管是自己看,还是以后离职了接手的看,都是一目了然。

至于路由后面加入id之类的字段,我不是很建议这样做,因为这些都是用户可以自行修改的,可能出现超权的现象。


撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题