Routing 是什么阻止了修复某些内容管理系统在URL中插入任何内容的问题?

Routing 是什么阻止了修复某些内容管理系统在URL中插入任何内容的问题?,routing,content-management-system,Routing,Content Management System,我不明白现实世界中有什么问题阻止系统禁止这些类型的URL http://www.washingtonpost.com/hey-this-url-doesn't-mean-a-damn-thing/gIQAocHrpJ_story.html 我知道发生了什么事。路由系统在最后一个反斜杠后查找密钥。然后它解析出下划线后面的内容来构建版本 因此: washingtonpost.com/whatever/gIQAocHrpJ_story.html为我们带来了正常的故事版本 washingtonpost

我不明白现实世界中有什么问题阻止系统禁止这些类型的URL

http://www.washingtonpost.com/hey-this-url-doesn't-mean-a-damn-thing/gIQAocHrpJ_story.html
我知道发生了什么事。路由系统在最后一个反斜杠后查找密钥。然后它解析出下划线后面的内容来构建版本

因此: washingtonpost.com/whatever/gIQAocHrpJ_story.html为我们带来了正常的故事版本 washingtonpost.com/whatever/gIQAocHrpJ_print.html为我们带来了正常的打印版本 washingtonpost.com/whatever/gIQAocHrpJ_mobile.html为我们带来了移动xml版本

奇怪的是,即使将.html更改为另一个常用扩展名,如.js或.xml,或者什么都没有,也会使您返回到同一个页面。然而,将其更改为非标准的页面,比如.fffuuu,或者会为您带来一个人性化的404页面或一个完全空白的页面。这就像CMS程序员刚刚将最初出现在脑海中的几个文件类型列入白名单,并让系统对它们一视同仁

我只在Rails和Wordpress中创建过简单的站点,因此我了解url模式的简单概念,例如前缀常量如何影响查找速度……但是我认为上述设计模式没有韵律或理由,这是错误的吗

请注意,《华盛顿邮报》最近刚刚完成了一项重大的重新设计。这并不是试图用一个遗留系统,他们的CMS设计师显然有自由采用现代最佳实践。我只是看不到他们所采用的url设计模式的优点,除了CMS设计者不知道有什么更好的

他们当前的系统比一个数据库模型快多少,它有一个唯一的键,然后是一个人类可读的字段

域反斜杠和最终反斜杠之间的模式是人类可读的键。系统找到具有唯一_键的记录,然后查看人类可读键是否与数据库中该记录的匹配

我注意到,在官方版本的链接中,因为它们是从主页生成的,包含年/月/日信息。同样,这是毫无意义的,因为您可以更改这些内容并获得相同的页面(谢天谢地,没有JS依赖于解析这些内容)

我猜CMS设计师不想受日期的约束,因为2011年8月20日可能会有新闻报道,但印刷版会在2011年8月21日上线……当然,那么URL中根本就没有日期。如果URL可以更改为任何内容,那么不要训练用户期望其中包含特定于文档的信息

域之后的第一个术语也没有任何意义。因此:

http://www.washingtonpost.com/politics/mitt-romney-debates-us-economy/gIQAocHrpJ_story.html
和你的故事一样

http://www.washingtonpost.com/sex/mitt-romney-debates-us-economy/gIQAocHrpJ_story.html

最后,这难道不会对谷歌和其他搜索引擎造成严重破坏吗?

这样做的关键原因是确保如果标题发生变化,读者仍然可以看到这篇报道。“slug”(你称之为人类可读的钥匙:米特·罗姆尼辩论美国经济)通常是从页面的标题或标题文本自动生成的。在一些旧的CMSE中,这一点没有经过深思熟虑,更改标题通常会使URL保持不变(其中包含旧的slug)。正如你所能想象的,有时候,当最初的标题选择不当时,这可能会相当尴尬

因此,大多数CMS开发人员转而根据ID查找故事,这样更容易确保不会更改。但是那怎么处理鼻涕虫呢?一些CMSE只是忽略了它;这就是《华盛顿邮报》的做法

另一个(相当简单,可能更好)的解决方案是:当您在数据库中找到您的故事时,确保URL的slug与数据库中故事的当前slug匹配(基于当前标题)。如果没有,请将用户重定向到正确的URL。从最终用户的角度来看,它是无缝的:您可以输入
http://www.washingtonpost.com/hey-this-url-doesn't-mean-a-damn-thing/gIQAocHrpJ_story.html
当页面加载完毕时,您的位置是
http://www.washingtonpost.com/politics/mitt-romney-debates-us-economy/gIQAocHrpJ_story.html


我不确定《华盛顿邮报》为什么不这么做;他们那里有很多聪明的人,所以可能有一些很好的技术原因与他们特定的CMS有关(我猜这是基于他们从供应商那里购买的东西)。在其他系统中,我所描述的解决方案可以很容易地完成(在Django中,我用三行代码完成)。

是的,我也这么怀疑,但我只是怀疑是否有“优秀的技术原因”。目前所有内容都指向“糟糕的设计”他们的第三方供应商可能会告诉他们,改变成本太高,如果不是的话