【问题标题】:URL Encoding with Underscores in a Directory Name?目录名称中带有下划线的 URL 编码?
【发布时间】:2011-01-14 10:00:55
【问题描述】:

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

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

例如,如果目录的名称在我们的软件中以字符串的形式列出,它会是:“andy_test”,但是当软件将目录输出到 Apache 服务器时,它会变成“andy%5Ftest”。不幸的是,当您访问服务器上的 url 时,它最终变成了“andy%255Ftest”。

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

  1. andy_test
  2. andy%5Ftest
  3. andy%255Ftest

我假设“%5”是下划线的编码,“%25”是“%”的编码。

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

我问了后端的人,他们说他们只是:“编码任何不是字母或数字的东西。

所以我想我对此有点困惑。你能告诉我谁是对的,并告诉我一些关于为什么的信息吗?

【问题讨论】:

    标签: apache encoding url-rewriting directory apache2


    【解决方案1】:

    您不应在创建目录名称时对其进行编码(如您所建议的那样)。编码应该只发生在它被分发给浏览器的最后阶段。这就是您最终使用“双”编码的原因:%25 是 %,而 5F 是下划线的第一个编码的剩余部分。

    另外,请注意,您不需要根据rfc1738 对下划线进行编码。

    2.2。 URL 字符编码问题

    ...

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

    【讨论】:

    • 也感谢 RFC 参考!
    【解决方案2】:

    在您显示的内容中发生了双重编码。两步就够了:

    andy_test 既是软件中的字符串,也是文件系统中目录或脚本的实际名称(Web 服务器访问的资源)

    andy%5Ftestandy_test URL 编码的。浏览器应该使用这个字符串(在下划线的情况下并不真正需要,但在其他情况下可能需要)。

    andy%255ftest 只是andy_test URL 编码了两次,没有意义,应该没有必要。只需决定在哪里进行编码。如果您在代码级别和网络服务器级别都这样做,这可能会发生,结果是链接断开,除非您再次解码两次,这既不需要也不理智。

    【讨论】:

    • 我没有为软件编写后端,我只是想说服后端的人,有些事情做错了。
    • @leeand00:很明显,将一件事做两次是错误的。目的应该是确定在哪里进行编码的最佳位置,并且只在那里进行(而不是两次)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多