为什么这么多Ruby on Rails应用程序在其URL中缺少尾部斜杠?一个例子是http://basecamphq.com/tour。 AFAIK违反了Web标准。是否与RoR的设置方式有关?
答案 0 :(得分:12)
这不符合Web标准。 http://basecamphq.com/tour被认为是一个文件,http://basecamphq.com/tour/将是一个目录(注意:两个URL都不相同,尽管一些网络服务器 - 例如Apache - 如果不存在则会检查另一个)。由于两者都是虚拟的,因此主要由开发人员决定(这与使用的编程语言或框架无关)。
我认为它与缓存(如nilamo所提到的)有关,因为有足够的HTTP标头用于缓存控制 - 可能是某些反向代理具有不同的默认行为。
答案 1 :(得分:5)
你的论点无效:
w3c's url spec不会在网址上强制使用结尾斜杠。
这是关于斜杠的说法:
路径以某种方式解释 取决于所使用的方案。 通常,保留的斜杠“/” 字符(ASCII 2F十六进制)表示a 等级结构中的等级 左边的更高级别部分 斜线。
Rails非常符合这一指令。
我的头发是一只鸟!
答案 2 :(得分:2)
因为尾部斜杠表示目录,并且您不访问Rails中的目录,而是访问页面。它就像你的例子中的tour.html,除了.html可以被忽略,因为它是默认值。
答案 3 :(得分:1)
我想冒昧地说,因为在RoR中,您键入的URL通常不会映射到目录中的静态文件,而是由routes.rb文件动态解析,以尾随斜杠结束路径不会很有道理。
答案 4 :(得分:0)
有些像斜线,有些则没有。可以为双方提出慷慨激昂的论点。
答案 5 :(得分:0)
Rails使用斜杠作为参数标记分隔符和
之类的路径/post/:year/:page
默认情况下匹配 / post / 2012 / a-title 和 / post / 2012 / a-title / ,除非你做了magic 。 这与网络标准无关。
从浏览器的角度来看,这两条路径在处理相关资源时非常不同。在回复上述内容时使用< img src =“ image.png ”/>浏览器将向服务器发送第二个查询: /post/2012/image.png (第一种情况)或 /post/2012/a-title/image.png (第二种情况),因为浏览器使用尾部斜杠来解析路径,就好像它们是目录一样。
但是,Rails开发人员通常不关心,因为他们在呈现内容时不会显式写入URL!他们可以使用URL帮助程序来隐藏这些逻辑......除非你不使用帮助程序生成内容,否则你就会关心。
答案 6 :(得分:-3)
这是一种URL重写方式。它不符合Web标准,实际上对可用性做了很多,并且已被证明可以帮助您的搜索引擎排名。可以这样想。
您正在告诉您的朋友您在某人博客上看到的这篇很酷的帖子。哪个网址更容易告诉您的朋友: