apache - 目录名称中带有下划线的 URL 编码?

标签 apache encoding url-rewriting directory apache2

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

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

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

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

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

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

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

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

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

    最佳答案

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

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

    2.2. URL Character Encoding Issues

    ...

    Thus, only alphanumerics, the special characters "$-_.+!*'(),", and reserved characters used for their reserved purposes may be used unencoded within a URL.

    关于apache - 目录名称中带有下划线的 URL 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222519/

    相关文章:

    java - Android Firebase - 无法从 Firebase 快照接收正确的 JSON

    asp.net - 如何在 IIS 中将所有非 www URL 重定向到 https ://www.?

    apache - 基于接受语言的重定向

    android - 从通过路由器连接的Android设备访问Wamp localhost

    java - 获取 UTF-8 格式的文件名? (ä,ü,ö ... 总是 '?' )

    apache - RewriteEngine 每次都在 <IfModule mod_rewrite.c> 中打开?

    IIS URL 重写模块 : Redirect Based On QueryString

    php - 通过 php 将 mysql 数据库导出到 csv 在 4kb 后停止

    apache - 如何在 Tomcat 中将 deployXML 设置为 false?

    c++ - 从 wchar_t 转换为 char,反之亦然