使用目录名称中的下划线进行URL编码?

lee*_*d00 7 apache directory encoding apache2 url-rewriting

我在工作中遇到了一个奇怪的争论,我可能在这方面错了,所以这就是我要问的原因.

我们的软件将目录输出到Apache服务器,该目录替换名称为%5F的下划线.

例如,如果目录的名称在我们的软件中列为字符串,那么它将是:"andy_test",但是当软件将目录输出到Apache服务器时,它将变为"andy%5Ftest".不幸的是,当您访问服务器上的URL时,它最终变为"andy%255Ftest".

不知怎的,这似乎对我来说是错误的,再一次进展是:

  1. andy_test < - (作为软件中的字符串)
  2. andy%5Ftest < - (列为服务器上的目录)
  3. andy%255Ftest < - (必须在从Web浏览器调用与服务器上的URL相同的目录时使用.)

我假设"%5"编码为下划线,而"%25"编码为"%".

现在在我看来,目录名称应该在服务器上列出的方式只是简单的andy_test,如果你使用的是编码的URI,那么你可能最终得到"andy%5Ftest"来访问目录apache服务器.

我问后端的人有关它,他们说他们只是:"编码任何不是字母或数字的东西.

所以我想我对此有点困惑.你能告诉我谁是对的,并指导我一些有关原因的信息吗?

ziy*_*iya 11

您不应在创建目录名时对其进行编码(如您所建议的那样).编码应该只发生在分发给浏览器的最后阶段.这就是为什么你最终得到'双'编码:%25是%和5F是第一次下划线编码的剩余.

顺便说一下,你无论如何都不需要编码下划线(我认为根据rfc1738).

2.2.URL字符编码问题

...

因此,只有字母数字,特殊字符"$ -_.+!*'()",和用于各自保留目的的保留字符可以在URL中使用未编码.