为什么Apache删除多个斜杠?

Dru*_*ust 4 regex apache .htaccess mod-rewrite

这个RewriteRule

RewriteRule ^test/(.*)$ test.php?url=$1

在此URL上

mysite.com/test//one///two////three///

给我这个结果

$1=url='one/two/three/'

我正在使用easyphp,如果它很重要,我想知道为什么Apache在内部删除多个斜杠而不重定向到更正的URL?以及如何禁用或添加重定向到此行为?

预先感谢

Pek*_*ica 8

似乎有多个斜线违反标准.正如本文所述,RFC 1630说:

路径

URI的其余部分以格式跟随冒号,具体取决于方案.以依赖于所使用的协议的方式解释路径.但是,当它包含斜杠时,这些都意味着一个层次结构.

///并不意味着层次结构 - 你有空的文件夹名称.从那以后我猜想Apache的行为是设计的.(使用多个斜杠也不是一个好主意,因为结果将是无效的URL).

我会改用不同的角色.

  • @Pekka웃嗯,`Apache/2.4.6(CentOS)`不提供`301`重定向(在这种情况下,google会将所有url与`///`合并到一个正确的URL).相反,它看起来像Apache重写请求的URI,所以如果请求是'GET/test /// HTTP/1.1`,那么`REQUEST_URI`将是`test /`.我认为这很糟糕,因为我希望我的脚本有完整的请求URI,它将处理它...仍然在寻找解决方案. (2认同)