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

我完全意识到seo相关的问题——重复的内容和规范的东西;我正在试图找出我应该在正确地单独提供页面的上下文中使用哪一个。

例如,我的同事认为末尾的斜杠意味着它是一个“文件夹”-一个“目录”,所以这不是一个正确的风格。但我认为最后没有斜杠也不太正确,因为它看起来像一个文件夹,但它不是,它也不是一个正常的文件,而是一个没有扩展名的文件名。

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


当前回答

谁说文件名需要扩展名??找个时间看看*nix机器… 我同意你朋友的说法,没有拖尾斜线。

其他回答

我总是惊讶于在非目录url (WordPress等)上大量使用尾随斜杠。这真的不应该是一个非此即彼的争论,因为在资源后面加上斜杠在语义上是错误的。web被设计用来提供可寻址的资源,而这些地址(url)被设计用来模拟*nix风格的文件系统层次结构。在这种情况下:

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

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

这不是美学的问题,而是技术上的差异。目录的想法是完全正确的,几乎解释了一切。让我们算算:

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

你在你的web服务器上有一个固定的目录结构,只有静态文件,如图像,html等等-没有服务器端脚本或任何东西。

浏览器请求/index.htm,它存在并被交付给客户端。之后,你有很多——比方说——DVD电影的评论和一个html页面的每一个在/ DVD /目录。现在有人请求/dvd/adams_apple .htm,它会被传递,因为它就在那里。

在某一天,有人只是请求/dvd/ -这是一个目录,服务器试图弄清楚要交付什么。除了访问限制等等,还有两种可能:向用户显示目录内容(我打赌您已经在某处见过)或显示默认文件(在Apache中是:DirectoryIndex:设置当请求目录时Apache将提供的文件)。

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

早上5:34,你上传文件时出错了

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

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

有人听说了你的清单,正在输入/dvd。现在它完蛋了。服务器没有列出你的DVD目录,而是找到一个同名的文件,并传递你的“绿脚趾”文件。

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

状态码:301永久移动位置: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只是在内部加载index.php? Controller =dvd&action=list。

简介:

If it ends with / it can never be a file. No server guessing. Slash or no slash are entirely different meanings. There is a technical/resource difference between "slash or no slash", and you should be aware of it and use it accordingly. Just because the server most likely loads /dvd/index.htm - or loads the correct script stuff - when you say /dvd: It does it, but not because you made the right request. Which would have been /dvd/. Omitting the slash even if you indeed mean the slashed version gives you an additional HTTP request penalty. Which is always bad (think of mobile latency) and has more weight than a "pretty URL" - especially since crawlers are not as dumb as SEOs believe or want you to believe ;)

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

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

在这种情况下,我会选择后面有斜杠的那个。这是因为。com扩展名是Windows可执行命令文件的扩展名。搜索引擎和病毒检查程序通常不喜欢看起来可能包含通过此类机制分发的恶意软件的url。后面的斜杠似乎减轻了任何担忧,允许页面在搜索引擎中排名,并通过病毒检查。

如果你的url没有。,那么为了简单起见,我建议省略后面的斜杠。

对于根域或子域,后面的斜杠无关紧要。谷歌认为这两个是等价的。

但后面的斜杠对其他所有内容都很重要,因为谷歌将两个版本(一个带有后面的斜杠,一个没有)视为不同的url。 通常,URL末尾的斜杠(/)意味着URL是一个文件夹或目录。

末尾没有斜杠的URL通常意味着该URL是一个文件。

阅读更多

谷歌的建议

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

Child相对于/base/是/base/ Child。 Child相对于/base是(也许令人惊讶)/ Child。