我返工我的项目的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风格
应用程序获取之前看到的请求,兼容性和安全性原因的混合Web服务器通常会删除多个斜线。 当用作纯文本文件,它是通常的,以允许任何数量的路径段之间斜线表现为一个斜线。
空白URL路径段并不在URL中无效,但它们通常避免,因为有空白段相对URL可能会意外地解析。 例如,在/module/search
,链接到//subject/param
不能相对于该文件,但到服务器的链接subject
与路径/param
。
您是否可以从原始URL看多斜线序列取决于您的服务器和应用程序框架。 在CGI中,例如(和基于它的其他网关的标准),则PATH_INFO
是通常用于实现路由通常会忽略多个斜线变量。 但在Apache有一个非标准环境变量REQUEST_URI
这给请求的原始形式,而不必消隐斜线或完成的任何%-unescaping像PATH_INFO
一样。 所以,如果你想允许空的路径段,你可以,但它会减少你的部署选项。
还有其他的字符串不是空字符串,不好好路径段无论是。 使用的编码/
(%2F), \
(%5C)或空字节(%00)被阻止通过默认由许多服务器。 所以,你不能把一个段任何旧的字符串; 它不得不进行处理,以除去一些字符(往往是“slug'-指明分数删除所有,但字母和数字)。 虽然你这样做,你不妨更换空字符串_
。
可能是因为它没有明确的规定是否多余/应被忽略或没有。
例如: http://news.bbc.co.uk/sport和http://news.bbc.co.uk//////////sport都显示在Firefox和Chrome相同的页面。 服务器处理的这两个网址为同样的事情,而你的服务器显然不会。
我不知道这种行为是否是什么地方,或者没有定义,但它似乎是有道理的(至少在BBC网站 - 如果我键入一个额外的/,它做什么,我的意思做的事。)