什么时候应该在网址中使用斜杠?


282

URL中何时应使用斜杠?例如-我的网址应为/about-us/还是类似/about-us

我完全意识到与SEO相关的问题-重复的内容和规范的事情;我正在尝试确定在投放页面的上下文中应该使用哪一个单独正确

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

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


斜线结尾,但在我看来主要是美学。外观和感觉。
埃里克·赫里兹


4
这个问题被认为是偏爱的一个问题,因此,由于主要基于观点,因此似乎不在主题之列。但是,正如我的回答所示,实际上将这个问题作为偏好问题是一个错误:这是一个XY问题,而底层的“实际”问题具有精确的技术答案,因此主要不是基于观点的
Raedwald

关于Google喜欢的哪种类型的URL的问题与编程无关(如标签Wiki中所述),对于Stackoverflow来说是无关紧要的。
昆汀

我已对您的问题进行了一些修改,如果有机会,请仔细检查。谢谢:)
蒂姆·波斯特

Answers:


131

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

基本上,URL格式来自文件和文件夹的UNIX相同格式,此后在DOS系统上,最后适用于Web。

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

资料来源:维基百科:统一资源标识符

另一个值得阅读的好资料:Wikipedia:URI方案

根据RFC 1738(在1994年定义了URL),当资源包含对其他资源的引用时,它们可以使用相对链接来定义第二个资源的位置,就好像说,“与该资源位于同一位置,但以下相对位置路径”。它接着说,这种相对URL取决于包含针对其相对链接是基于分层结构的原始URL,并且该FTP,HTTP,和文件的URL方案是一些可以考虑分级的例子,与层次结构中的各个组件用“ /”分隔。

资料来源:Wikipedia统一资源定位符(URL)

也:

这是我们经常听到的问题。继续回答!从历史上看,使用带斜杠的URL表示目录,而不带斜杠的URL表示文件是常见的:

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

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

来源:Google WebMaster Central Blog-斜线或不斜线

最后:

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

  2. 末尾没有斜杠且没有扩展名的URL看起来有些“怪异”。

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

但是无论环境如何,我都是Web最佳实践的拥护者。正如您所说的不带扩展名的URL一样,它可能是很模糊和不清楚的。


1
这很奇怪,您不能将文件命名为“ stylesheet /”-无论URL看起来如何,斜杠或无斜杠都是服务器上的完全不同的资源
nico gawenda 2013年

10
@nicogawenda,.htaccess可以完成各种魔术;)您的CSS可能实际上是一个php文件!
rmorse

4
Web服务器通常设置为默认服务index.html(或类似命名的文件)时,目录访问,所以/foo//foo/index.html没有额外的混乱。另外,过去,浏览器会附加/到域名之后,但是自那时以来,它们(Firefox,Chrome,Opera)已更改为/在访问主页时省略。
0b10011年

4
我同意@bfrohs。目录的默认页面肯定会违反此原则。如果要强制执行“ trailing slash = directory”,那么肯定所有指向目录的url都必须返回目录列表或403禁止的HTTP响应。
Marvin

11
我不确定“最后”部分中的第1点和第2点是否仍然正确。自从最初编写此书以来,多年来,口味发生了变化。我没有对此进行详细研究,但似乎在较新的网站上,省略斜杠更为常见且“更漂亮”。
speedplane

171

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

  • child相对/base//base/child
  • child相对于/base(可能令人惊讶)/child

5
对此有深度的有用文章:cdivilly.wordpress.com/2014/03/11/…–
Hephaestus

3
是的,我认为这与SEO一起是解决此问题最重要的事情。
user2875289

刚在使用.Net时遇到了这个问题Uri.MakeRelativeUri。结果正好反映了您所说的话。我通过在结尾加上斜杠来解决此问题Uri
julealgon

61

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

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

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


50
“在目录后加斜杠,而不在资源后斜杠”:URL不指两种类型的事物,“资源”和“目录”;他们指的是一种东西:资源。线索在URL的R中。
拉德瓦尔德

31
* nix文件系统中的所有内容都是文件,但目录仍然存在。你想说什么?
Yarin 2013年

6
无论是内部提供文件还是目录提供服务,用户看到的只是一个网页。并且example.com/about实际上可以从example.com/about/index.html中读取。
musiphil 2014年

1
@DavidRR:你是对的。浏览器需要重定向,因为名称解析必须从内部进行directory(否则,image.pngin http://hostname/directory指向http://hostname/image.png)。我只是说,从用户的角度来看,文件和目录之间的区别可能不是很重要。
musiphil 2014年

2
我同意您的结果,但是我不确定我们是否应该设计URL系统来模拟* nix样式的文件系统。那可能起初是有目的的,但现在已经没有了。
speedplane

27

这实际上不是美学的问题,而是技术上的区别。目录的思考是完全正确的,几乎可以解释所有内容。让我们来解决:

您现在正处于石器时代,或只投放静态页面

您的Web服务器上具有固定的目录结构,并且只有静态文件(如图像,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/,然后重定向到的HTTPS URL customer/login/。您最终将拥有大量不必要的HTTP重定向(=其他请求),这会使用户体验变慢。

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

摘要:

  • 如果结尾是文件/,则永远不会没有服务器猜测。

  • 斜杠或不斜杠是完全不同的含义。“斜杠或无斜杠”之间存在技术/资源上的区别,您应该意识到并适当地使用它。仅仅因为服务器/dvd/index.htm在您说/dvd:时加载了(或加载了正确的脚本内容),但这并不是因为您发出了正确的请求。那本来是/dvd/

  • 省略斜线,即使你的确是说的削减版本,给你一个额外的HTTP请求处罚。这总是不好的(考虑到移动延迟),并且比“漂亮的URL”更重要-尤其是因为搜寻器不像SEO相信或希望您相信的那样愚蠢;)


2
总结一下,是否所有人都在末尾添加了斜杠?:)
Denis 2013年

2
当您要使用它时,我全都使用它;)例如,谈到控制器和操作时,它是:控制器应以斜杠结尾。当您引用文件或操作时,请省略斜杠
nico gawenda 2013年

等等,为什么您要省略一个动作?按照您的示例,这是否会导致额外的重定向请求?我的意思是,假设您的服务器足够聪明,可以识别控制器动作,并且在这种情况下实际上不会重定向以查找文件或目录,但是仍然与您的示例背道而驰吗?
亚当·古德温

7
我不明白你的榜样。什么文件系统允许目录和另一个具有相同名称(dvd)的常规文件?
musiphil

19

当你让你的网址/about-us/(用斜线),它很容易启动一个单独的文件index.html,然后在以后进行扩展,并添加更多的文件(例如our-CEO-john-doe.jpg),甚至建立在它之下(例如一个层次/about-us/company//about-us/products/根据需要,等等),而不更改发布的URL。这为您提供了极大的灵活性。


9
对不起我没有得到。如果我以开头, /about-us或者/about-us/在两种情况下都需要扩展发布的URL(如果我扩展目录)。/about-us/new-file.html在这两种情况下,新文件都是!我在这里想念什么?
会计师

2
@Accountant我认为OP可能会认为,如果您发布“ / about-us”而没有结尾斜杠,那么您以后将无法使用相对路径添加子资源。如果没有斜杠,浏览器将相信“关于”页面上对“ ceo.jpg”的引用将位于您域的根目录,并请求example.com/ceo.jpg。使用斜杠,浏览器将请求example.com/about-us/ceo.jpg,并且您可以在扩展时为您的站点静态路由整个文件夹树。
daw

1
仅供参考-我不相信以上任何一项都是正确的-为什么不能有/about-usand /about-us/company?在提供文件方面,Apache和IIS都可以很好地处理此问题,因此我不同意。
sean2078

1
@ sean2078是的,但是,如果/about-us您要从中链接到/about-us/company,则必须使用href="https://stackoverflow.com/about-us/company"href="./company"(尽管不确定那个)。/about-us/不过,如果您在使用,则很简单:href="company"
Adowrath

11

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

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

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

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


没有真正的搜索引擎这么愚蠢。这个答案纯粹是猜测。
纳文

1
我实际上已经在Google上看到了这个问题。那是几年前的事,所以我不确定今天是否还会如此。
斯蒂芬·奥斯特米勒

嗯,这是一个很好的数据点。尽管我们仍然不知道这是否是由其他原因引起的。
纳文

10

谁说文件名需要扩展名?有时在* nix机器上看一下...
我同意你的朋友,没有冒号。


3

从SEO角度来看,选择是否在URL末尾添加斜杠是无关紧要的。如今,在网上经常看到这两个示例。网站不会受到任何惩罚,这种选择也不会影响您网站的搜索引擎排名或其他SEO注意事项。

只需选择您喜欢的URL命名约定,然后在<head>每个网页的部分中添加一个规范的meta标签即可。

搜索引擎在遇到一个带有和不带有尾部斜杠(即example.com/about-us/和)的网页时,可能会将单个网页视为两个单独的重复URL example.com/about-us

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

规范标签如下所示:<link rel="canonical" href="https://example.com/about-us" />。使用规范的元标记可确保搜索引擎仅对您的每个URL计数一次,无论其他网站链接到您的网站时是否在其后面加上斜杠。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.