Apache 为什么要删除多个斜杠?

问题描述 投票:0回答:2

这个重写规则

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

在此网址上

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

给我这个结果

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

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

提前致谢

regex apache .htaccess mod-rewrite
2个回答
8
投票

多重斜线似乎不符合标准。正如这篇文章中指出的,RFC 1630说:

路径

URI 的其余部分位于冒号后面,其格式取决于 方案。该路径的解释方式取决于 正在使用的协议。 但是,当它包含斜杠时,这些 必须暗示层次结构。

///
并不意味着分层结构 - 你会有空的文件夹名称。由此我猜测 Apache 的行为是设计使然。 (使用多个斜杠也不是一个好主意,因为结果将是一个无效的 URL)。

我会使用不同的角色。


0
投票

我遇到了这个问题,解决方案是这样的:

RequestConfig requestConfig = RequestConfig.custom() .setNormalizeUri(false) .build();

只是 .setNormalizeUri(false) 是重点。

并将其 (requestConfig) 传递给 HttpClients,如下所示:

HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build();

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.