URL以反斜杠“/”结尾和不以“/”有什么区别?

自媒体 思享 1128浏览

最近在使用nginx搭建网站或前后端分离部署项目时遇到了一个疑惑,就是在浏览器中请求url时,最后一个反斜杠作用到底是什么?

解释

有没有反斜杠的意义在于该url是指向一个文件还是一个目录,说明url地址是精准表达指向的,有无'/'代表的是两个不同的地址。

例如:

https://www.4xseo.com/blog 指向的是网站根目录下一个名为blog的文件
https://www.4xseo.com/blog/ 指向的是网站根目录下一个名为blog的目录

对于服务器来说,如果访问的是目录,则会根据规则访问改目录下的默认文件(index.html、index.htm之类)如nginx中index指令。如访问/blog/服务器会寻找/blog/index.html文件(nginx里location中root/alias指令对应目录),而访问/blog服务器则会寻找/blog文件。

对于用户来说,在大多数情况下这两个网址没有任何区别,他们访问的都是网站 fxg 目录下的默认首页。一般用户也都知道最后一个斜杠是可有可无的,他们输入网址的时候一般都只会输入 https://www.4xseo.com/blog。

当 Web 服务器接收到某个末尾不含斜杠的 url 请求时,例如 https://www.4xseo.com/blog,这时服务器会搜索网站根目录下有没有名为 blog 的文件,如果没有就把 blog 当做目录处理,此时服务器会执行301永久重定向处理将/blog重定向到/blog/目录,然后返回 blog 目录下的默认首页。

注意:在nginx中如果使用非80端口重定向时会出现301丢失端口问题,这个后面文档单独解释

浏览器自动添加末尾斜杠(/)

当我们访问一个网址时,例如www.xxx.com,此时浏览器会自动帮我们添加上后面的反斜杠(/)注意:有些浏览器会自动隐藏/,例如:chrome。
这是因为,访问请求必须从"/"开始,即使是裸url,浏览器此时替我们做了正确的修正,在url后面自动的加上了"/"从而能正确访问。

所有主流浏览器在请求裸域URL(即首页)时都会对HTTP请求 “加斜杠” 。为了使HTTP请求有效,这实际上是必需的,其原因如下:

http://example.com/
----------------------------------
GET / HTTP/1.1
Host: example.com

请注意/第一行中的(斜杠)-这是所请求的URL。这里什么都没有是无效的。从RFC 2616开始:

请注意,绝对路径不能为空;如果原始URI中没有任何内容,则必须将其指定为“ /”(服务器根目录)。

你可以查看浏览器向服务器发出的HTTP请求。显示在“浏览器状态栏”中的URL,甚至地址栏中的URL可能因浏览器不同而不同。谷歌Chrome并不会追加在状态栏最后的斜线,虽然斜线是存在的。

如果指定http://example.com(无斜杠),此时不会发生301重定向,因为浏览器会在发出HTTP请求之前先对其进行了修正。

请注意,这与URL中存在路径/目录时(http://xxx.com/yyy)在URL末尾添加斜杠不同。如果您请求http://example.com/directory(不使用斜杠),此时浏览器不会自动添加一个斜杠,大多数服务器如果找不到该文件则将301重定向到http://example.com/directory/(斜杠)目录进行加载。

推荐阅读

静态URL和动态URL优化有什么区别?

无论你是静态还是动态,我们都认为同样都是url来对待。...

url中使用#号好不好?

一般来说,url当中的#号是一个锚点的标志位,这样的url打开之后会将访问者的视线定位在指定位置上,令访问者直接看到网页中间的一段内容。自从推特流行开始,#号被附予了新的意义——话题。很多站长直接在#号后面加参数且参数是有效的,即#号去掉与不去掉,打......

用中文URL利于SEO优化吗?

转码时,中文会变成一堆符号,不利于传播,用户反而无法从URL中判断网页的内容。...