2010-07-10 109 views
1

我正在修改我的项目的URL格式。我们的搜索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/module/search后有3个斜线)?请注意,我没有在我的项目中使用.htaccess重写规则。该网址在功能上完美运行。那么,我应该使用这种格式吗?

关于我们为什么选择这个格式的详细信息,请查看我的其他问题: - Suggest best URL style

回答

1

Web服务器通常会在应用程序查看请求之前删除多个斜杠,以兼顾兼容性和安全性原因。在提供纯文件时,通常允许路径段之间的任意数量的斜线表现为一个斜线。

空白URL路径段在URL中不是无效的,但通常会避免使用它们,因为具有空白段的相对URL可能会意外解析。例如,在/module/search中,指向//subject/param的链接与文件无关,但指向服务器subject的链接,其路径为/param

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

还有其他字符串,而不是空的字符串,不做好路径段。使用编码的/(%2F),\(%5C)或空字节(%00)被许多服务器默认阻止。所以你不能在段中放入任何旧的字符串;它将不得不被处理以删除一些字符(通常是'slug' - 如果删除了所有字母和数字)。虽然你这样做,你也可以用_替换空字符串。

+0

很好的解释 – 2010-07-12 10:11:09

0

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

例如:http://news.bbc.co.uk/sporthttp://news.bbc.co.uk//////////sport都在Firefox和Chrome中显示相同的页面。服务器将这两个URL视为同一件事,而您的服务器显然不是。

我不确定这个行为是否定义在某个地方,但它似乎有意义(至少对于BBC网站 - 如果我输入一个额外的/,它就是我的意思)。