【问题标题】:When should I use a trailing slash in my URL?什么时候应该在我的 URL 中使用斜杠?
【发布时间】:2021-03-12 03:03:15
【问题描述】:

什么时候应该在 URL 中使用尾部斜杠?例如 - 我的 URL 应该看起来像 /about-us/ 还是像 /about-us

我完全了解与 SEO 相关的问题 - 重复的内容和规范的东西;我正在尝试找出我应该在单独正确提供页面的上下文中使用哪一个。

例如,我的同事认为末尾的斜杠表示它是“文件夹”-“目录”,因此这不是正确的样式。但我认为最后没有斜线 - 这也不完全正确,因为它几乎看起来像一个文件夹,但它不是而且它也不是一个普通文件,而是一个没有扩展名的文件名。

是否有正确的方法知道使用哪个?

【问题讨论】:

  • 尾部斜线,但在我看来它主要是美学。外观和感觉。
  • 这个问题是作为偏好之一提出的,因此似乎与主题无关,因为主要基于意见。然而,正如my answer 所示,实际上将这个问题作为偏好问题是一个错误:这是一个 XY 问题,而潜在的“真实”问题有一个精确的技术答案,因此不是主要意见基于.
  • 关于 Google 喜欢哪些类型的 URL 与编程无关(如 tag wiki 中所述)并且与 Stackoverflow 无关的问题。
  • 伙计们,这个问题对 SO 来说很好。

标签: url url-rewriting seo trailing-slash url-design


【解决方案1】:

这不是偏好问题。 /base/base/ 具有不同的语义。在许多情况下,差异并不重要。但当有相对 URL 时,这一点很重要。

  • child 相对于 /base//base/child
  • child 相对于 /base 是(也许令人惊讶)/child

【讨论】:

  • 帮助文章深入探讨:cdivilly.wordpress.com/2014/03/11/…
  • 是的,我认为这与 SEO 一起是这个问题最重要的事情。
  • 刚刚在使用.Net的Uri.MakeRelativeUri时遇到了这个问题。结果完全反映了你所说的。我通过将尾部斜杠添加到我的基础 Uri 来解决此问题。
【解决方案2】:

在我个人看来,斜杠被滥用了。

基本上,URL 格式来自相同的文件和文件夹的 UNIX 格式,后来在 DOS 系统上,最后适应了网络。

这本书在类 Unix 操作系统上的典型 URL 是文件路径,例如 file:///home/username/RomeoAndJuliet.pdf,标识保存在本地硬盘文件中的电子书。

来源:Wikipedia: Uniform Resource Identifier

另一个很好的阅读来源:Wikipedia: URI Scheme

根据 RFC 1738,它在 1994 年定义了 URL,当资源包含对其他资源的引用时,它们可以使用相对链接来定义第二个资源的位置,就好像在说,“在同一个地方,除了以下相对路径”。它接着说,这样的相对 URL 依赖于包含相对链接所基于的层次结构的原始 URL,并且 ftp、http、 和文件 URL 方案是一些可以被视为分层结构的示例,分层结构的组件由“/”分隔。

来源:Wikipedia Uniform Resource Locator (URL)

还有:

这是我们经常听到的问题。前往答案!从历史上看,带有尾部斜杠的 URL 表示目录是很常见的,而没有尾部斜杠的 URL 则表示目录。 表示一个文件:

http://example.com/foo/(带有斜杠,通常是目录)

http://example.com/foo(不带斜线,通常是文件)

来源:Google WebMaster Central Blog - To slash or not to slash

最后:

  1. URL 末尾的斜线使地址看起来“漂亮”。

  2. 结尾不带斜杠且不带扩展名的 URL 看起来有些“奇怪”。

  3. 您永远不会将您的 CSS 文件命名为(例如)http://www.sample.com/stylesheet/,对吗?

但无论环境如何,我都是网络最佳实践的支持者。 正如你所说的没有分机的 URL,它可能很不稳定和不清楚。

【讨论】:

  • 这很奇怪,您不能将文件命名为“stylesheet/” - 无论 URL 看起来如何,斜线或不斜线都是服务器上完全不同的资源
  • @nicogawenda,.htaccess 可以做各种魔法;)你的 CSS 可能实际上是一个 php 文件!
  • Web 服务器通常默认设置为在访问目录时为index.html(或类似名称的文件)提供服务,因此/foo//foo/index.html 而不会造成额外的混乱。此外,过去,浏览器会在域名后附加/,但它们(Firefox、Chrome、Opera)后来更改为在访问主页时省略/
  • 我同意@bfrohs。当然,目录的默认页面违反了这一原则。如果我们要强制执行 'trailing slash = directory',那么肯定所有指向目录的 url 都必须返回目录列表或 403 禁止的 http 响应。
  • 我不确定“最后”部分中的第 1 点和第 2 点是否仍然准确。自从最初写这篇文章以来的这些年里,口味已经发生了变化。我没有详细研究过这个,但似乎在较新的网站上,省略斜线更常见且“更漂亮”。
【解决方案3】:

我总是对在非目录 URL(WordPress 等)上广泛使用尾部斜杠感到惊讶。这真的不应该是一个非此即彼的辩论,因为在资源后放置一个斜杠在语义上是错误的。 Web 旨在提供可寻址资源,而这些地址(URL)旨在模拟 *nix 样式的文件系统层次结构。在这种情况下:

  • 斜杠始终表示目录,而不是文件。
  • 文件可以任意命名(带或不带扩展名),但不能包含斜杠或以斜杠结尾。

使用这些准则,在非目录资源后放置斜杠是错误的。

【讨论】:

  • “目录后面的斜线,而不是资源后面的斜线”:URL不指“资源”和“目录”这两种东西;它们指的是一种东西:资源。线索在 URL 的 R 中。
  • 而 *nix 文件系统中的所有内容都是文件,但目录仍然存在。你的意思是什么?
  • 无论是内部文件还是目录服务,用户看到的只是一个网页。 example.com/about 实际上可能是从 example.com/about/index.html 读取的。
  • @DavidRR:你是对的。并且浏览器需要重定向,因为名称解析必须从 directory 内部进行(否则,http://hostname/directory 中的 image.png 将指向 http://hostname/image.png)。我只是说从用户的角度来看,文件和目录之间的区别可能不是很重要。
  • 我同意你的结果,但我不确定我们是否应该设计我们的 URL 系统来模拟 *nix 样式的文件系统。这最初可能是有目的的,但现在已经大不相同了。
【解决方案4】:

这实际上不是美学问题,而是技术差异。考虑它的目录是完全正确的,几乎可以解释一切。让我们解决它:

您现在又回到了石器时代,或者只提供静态页面

您的网络服务器上有一个固定的目录结构,只有图像、html 等静态文件——没有服务器端脚本或任何东西。

浏览器请求/index.htm,它存在并传递给客户端。稍后,您在/dvd/ 目录中有很多- 比方说- 评论的DVD 电影和每个电影的html 页面。现在有人请求/dvd/adams_apples.htm,因为它就在那里。

在某一天,有人只是请求/dvd/ - 这是一个目录,服务器正试图找出要传递的内容。除了访问限制等等,还有两种可能性:向用户显示目录内容(我打赌你已经在某处看到过)或显示默认文件(在 Apache 中是:DirectoryIndex: sets the file that Apache will serve if a directory is requested.

到目前为止一切顺利,这是预期的情况。它已经显示了处理上的差异,所以让我们开始吧:

凌晨 5 点 34 分,您上传文件时出错

(顺便说一句,这是完全可以理解的。)所以,你做错了事,而不是上传/dvd/the_big_lebowski.htm,而是将该文件作为dvd(没有扩展名)上传到/

有人为您的/dvd/ 目录列表添加了书签(当然,您不想创建并总是更新那个漂亮的index.htm)并且正在访问您的网站。目录内容已交付 - 一切正常。

有人听说了您的列表并正在输入/dvd。现在它被搞砸了。服务器会查找具有该名称的文件,而不是列出您的 DVD 目录,并提供您的 Big Lebowski 文件。

因此,您删除了该文件并告诉该人重新加载页面。您的服务器正在寻找/dvd 文件,但它已经消失了。然后大多数服务器会注意到有一个具有该名称的目录,并告诉客户端它正在寻找的东西确实在其他地方。响应很可能是:

Status Code:301 Moved PermanentlyLocation: http://[...]/dvd/

因此,完全忽略对目录或文件的看法,服务器只能处理此类内容,并且 - 除非另有说明 - 为您决定“斜线与否”的含义。

终于客户端收到这个响应后,加载/dvd/,一切正常。

还好吗?没有。

“还好”对你来说不够好

您有一些动态页面,其中所有内容都传递给/index.php 并得到处理。到目前为止,一切都运行良好,但整个过程开始变得缓慢,您需要进行调查。

很快,您会注意到/dvd/list 的作用完全相同:重定向到/dvd/list/,然后在内部转换为index.php?controller=dvd&action=list。一个额外的要求 - 但更糟糕的是! customer/login 重定向到 customer/login/,而 customer/login/ 又重定向到 customer/login/ 的 HTTPS URL。您最终会有 不必要的 HTTP 重定向(= 额外的请求),这会使用户体验变慢。

您很可能在这里也有一个默认目录索引:index.php?controller=dvd 没有action 只是在内部加载index.php?controller=dvd&action=list

总结:

  • 如果它以 / 结尾,则它可能永远是一个文件。没有服务器猜测。

  • 斜线或无斜线是完全不同的含义。“斜线或无斜线”之间存在技术/资源差异,您应该了解并相应地使用它。仅仅因为服务器最有可能加载/dvd/index.htm - 或加载正确的脚本内容 - 当你说/dvd:它做到了,但不是因为你提出了正确的请求。应该是/dvd/

  • 即使您确实是指斜线版本也省略斜线会给您额外的 HTTP 请求惩罚。这总是很糟糕(想想移动延迟)和比“漂亮的 URL”更重要——尤其是因为爬虫并不像 SEO 相信或希望你相信的那样愚蠢;)

【讨论】:

  • 总而言之,你们都赞成在末尾添加斜线吗? :)
  • 我完全赞成使用它;)例如,谈到控制器和动作,它会是:控制器应该以斜线结尾。当你引用一个文件或一个动作时,省略斜线
  • 等一下,你为什么要省略斜线作为一个动作?根据您的示例,这不会导致额外的重定向请求吗?我的意思是,大概您的服务器足够聪明,可以识别控制器操作,并且在这种情况下实际上不会重定向以查找文件或目录,但它仍然不符合您的示例,不是吗?
  • 我不明白你的例子。什么文件系统允许一个目录和另一个具有相同名称的常规文件 (dvd)?
【解决方案5】:

当您将 URL 设为 /about-us/(带有尾部斜杠)时,可以很容易地从单个文件 index.html 开始,然后扩展它并添加更多文件(例如 our-CEO-john-doe.jpg),甚至在下面构建一个层次结构根据需要(例如/about-us/company//about-us/products/ 等),不更改发布的 URL。这为您提供了极大的灵活性。

【讨论】:

  • 很抱歉我没听懂。如果我以/about-us/about-us/ 开头,如果我扩展目录,我仍然需要在这两种情况下更改发布的URL。在这两种情况下,新文件都是/about-us/new-file.html !!我在这里错过了什么?
  • @Accountant 我认为 OP 可能会认为,如果您发布“/about-us”而没有尾部斜杠,那么您以后就不能使用相对路径添加子资源。当您没有尾部斜杠时,浏览器会认为关于页面上对“ceo.jpg”的引用将存在于您的域的根目录中,并会请求 example.com/ceo.jpg。使用斜线,浏览器将请求 example.com/about-us/ceo.jpg,并且您可以在扩展时为您的站点静态路由整个文件夹树。
  • 仅供参考 - 我不相信以上任何一个都是真的 - 为什么不能有 /about-us/about-us/company?在提供文件方面,Apache 和 IIS 都可以很好地处理这个问题,所以我不同意。
  • @sean2078 是的,但是如果您想从/about-us 链接到/about-us/company,则必须使用href="/about-us/company"href="./company"(虽然不确定)。不过,如果您使用的是/about-us/,这很简单:href="company"
【解决方案6】:

这里的其他答案似乎倾向于省略斜杠。在一种情况下,尾部斜杠将有助于搜索引擎优化 (SEO)。在这种情况下,您的文档的文件扩展名似乎不是.html。这成为评级网站的问题。他们可能会在这两个网址之间进行选择:

  • http://mysite.example.com/rated.example.com
  • http://mysite.example.com/rated.example.com/

在这种情况下,我会选择带有斜杠的那个。这是因为.com 扩展名是Windows 可执行命令文件的扩展名。搜索引擎和病毒检查程序通常不喜欢看起来可能包含通过此类机制分发的恶意软件的 URL。尾部斜线似乎可以缓解任何顾虑,允许页面在搜索引擎中排名并通过病毒检查器获取。

如果您的网址在文件部分没有.,那么为了简单起见,我建议您省略尾部斜杠。

【讨论】:

  • 没有真正的搜索引擎是那么愚蠢的。这个答案纯属猜测。
  • 我实际上已经在 Google 上看到了这个问题。那是几年前的事了,所以我不确定今天是否还会如此。
  • 嗯,这是一个很好的数据点。虽然我们仍然不知道它是否是由其他原因引起的。
  • ".com 扩展名是 Windows 可执行命令文件的扩展名" 是什么意思?而“通过这样的机制分发”
  • 维基百科有大量关于 Windows com 文件的信息:en.wikipedia.org/wiki/COM_file “执行首选项”和“.com 扩展名的恶意使用”部分说明了计算机病毒和其他恶意软件如何使用它们。
【解决方案7】:

谁说文件名需要扩展名?有时间看看 *nix 机器...
我同意你朋友的观点,没有斜线。

【讨论】:

    【解决方案8】:

    从 SEO 的角度来看,选择是否在 URL 末尾包含斜杠是无关紧要的。这些天来,在网络上看到两者的例子很常见。无论哪种方式,网站都不会受到惩罚,这种选择也不会影响您网站的搜索引擎排名或其他 SEO 考虑因素。

    只需选择您喜欢的 URL 命名约定,并在每个网页的 <head> 部分中包含一个规范的元标记。

    搜索引擎在遇到带有或不带有斜杠的单个网页时,可能会将其视为两个单独的重复网址,即example.com/about-us/example.com/about-us

    最佳做法是在每个页面上包含规范元标记,因为您无法控制其他网站如何链接到您的 URL。

    规范标签如下所示:<link rel="canonical" href="https://example.com/about-us" />。使用规范元标记可确保搜索引擎只计算您的每个 URL 一次,而不管其他网站在链接到您的网站时是否包含尾部斜杠。

    【讨论】:

      【解决方案9】:

      尾随斜杠对于您的根域或子域无关紧要。 Google 认为这两者是等价的。

      但尾部斜杠对其他所有内容都很重要,因为 Google 将这两个版本(一个带有尾部斜杠,一个没有)视为不同的 URL。 按照惯例,URL 末尾的斜杠 (/) 表示该 URL 是文件夹或目录。

      结尾没有斜杠的 URL 过去表示该 URL 是一个文件。

      Read more

      Google recommendation

      【讨论】:

        猜你喜欢
        • 2023-02-11
        • 2012-03-25
        • 2015-10-28
        • 2014-05-06
        • 2010-12-30
        • 1970-01-01
        相关资源
        最近更新 更多