我正在修改项目的URL格式。我们的搜索网址的基本格式为: -
www.projectname/module/search/<search keyword>/<exam filter>/<subject filter>/... other params ...
在没有搜索关键字和考试过滤条件的搜索中,网址为: -
www.projectname/module/search///<subject filter>/... other params ...
我的问题是为什么我们不能看到带有背靠背斜杠的这些URL(www.projectname / module / search之后有3个斜杠)?请注意,我不再在项目中使用.htaccess重写规则。此URL功能完善。那么,我应该使用这种格式吗?
有关我们选择此格式的原因的详情,请查看我的其他问题: - Suggest best URL style
答案 0 :(得分:1)
出于兼容性和安全性的原因,Web服务器通常会在应用程序查看请求之前删除多个斜杠。提供普通文件时,通常允许路径段之间的任意数量的斜杠表现为一个斜杠。
空白网址路径段在网址中无效,但通常会避免使用它们,因为具有空白网段的相对网址可能会意外解析。例如,在/module/search
中,指向//subject/param
的链接与文件无关,而是指向具有路径subject
的服务器/param
的链接。
是否可以看到原始URL中的多斜杠序列取决于您的服务器和应用程序框架。例如,在CGI(以及基于它的其他网关标准)中,通常用于实现路由的PATH_INFO
变量通常会省略多个斜杠。但是在Apache上有一个非标准的环境变量REQUEST_URI
,它给出了请求的原始形式,没有使用省略的斜杠或像PATH_INFO
那样完成任何%-unescaping。因此,如果您想允许空路径段,您可以,但它会减少您的部署选项。
除了空字符串之外还有其他字符串也不能构成好的路径段。许多服务器默认阻止使用编码的/
(%2F),\
(%5C)或空字节(%00)。所以你不能把任何旧的字符串放在一个段中;它必须被处理以删除一些字符(通常'slug'-ified删除除字母和数字之外的所有字符)。在您这样做的同时,您也可以用_
替换空字符串。
答案 1 :(得分:0)
可能是因为没有明确定义额外/是否应该忽略。
例如:http://news.bbc.co.uk/sport和http://news.bbc.co.uk//////////sport都在Firefox和Chrome中显示相同的页面。服务器将两个URL视为同一个东西,而你的服务器显然没有。
我不确定这种行为是否在某处定义,但它似乎有意义(至少对于BBC网站而言 - 如果我输入额外的/,它就是我的意思。)< / p>