为什么我们不使用这样的URL格式?(Why we don't use such URL fo

2019-09-28 10:24发布

我返工我的项目的URL格式。 我们的搜索URL的基本格式是这样的: -

www.projectname/module/search/<search keyword>/<exam filter>/<subject filter>/... other params ...

在没有搜索关键字和考试过滤搜索,网址为: -

www.projectname/module/search///<subject filter>/... other params ...

我的问题是,为什么我们没有看到这样的URL背靠背斜线(www.projectname /模块/搜索后3个斜杠)? 请注意,我不是在我的项目中使用的.htaccess重写规则了。 这个网址可以完美运行功能。 所以,我应该使用这种格式?

关于我们为什么选择这个格式的详细信息,请查看我的其他问题: - 推荐最好的URL风格

Answer 1:

应用程序获取之前看到的请求,兼容性和安全性原因的混合Web服务器通常会删除多个斜线。 当用作纯文本文件,它是通常的,以允许任何数量的路径段之间斜线表现为一个斜线。

空白URL路径段并不在URL中无效,但它们通常避免,因为有空白段相对URL可能会意外地解析。 例如,在/module/search ,链接到//subject/param不能相对于该文件,但到服务器的链接subject与路径/param

您是否可以从原始URL看多斜线序列取决于您的服务器和应用程序框架。 在CGI中,例如(和基于它的其他网关的标准),则PATH_INFO是通常用于实现路由通常会忽略多个斜线变量。 但在Apache有一个非标准环境变量REQUEST_URI这给请求的原始形式,而不必消隐斜线或完成的任何%-unescaping像PATH_INFO一样。 所以,如果你想允许空的路径段,你可以,但它会减少你的部署选项。

还有其他的字符串不是空字符串,不好好路径段无论是。 使用的编码/ (%2F), \ (%5C)或空字节(%00)被阻止通过默认由许多服务器。 所以,你不能把一个段任何旧的字符串; 它不得不进行处理,以除去一些字符(往往是“slug'-指明分数删除所有,但字母和数字)。 虽然你这样做,你不妨更换空字符串_



Answer 2:

可能是因为它没有明确的规定是否多余/应被忽略或没有。

例如: http://news.bbc.co.uk/sport和http://news.bbc.co.uk//////////sport都显示在Firefox和Chrome相同的页面。 服务器处理的这两个网址为同样的事情,而你的服务器显然不会。

我不知道这种行为是否是什么地方,或者没有定义,但它似乎是有道理的(至少在BBC网站 - 如果我键入一个额外的/,它做什么,我的意思做的事。)



文章来源: Why we don't use such URL formats?