【问题标题】:Apache not processing encoded URLs with %3FApache 不处理带有 %3F 的编码 URL
【发布时间】:2012-03-20 12:34:26
【问题描述】:

我网站的问题 url 链接格式为

/fullpage.php%3F%20cp3_Hex%3D0F0200%26cp2_Hex%3D000000%26cp1​​_Hex%3DFC2024

未编码的url是

/fullpadge.php?cp3_Hex=0F0200&cp2_Hex=000000&cp1_Hex=FC2024

Apache 返回一个:

403:您没有访问/fullpage.php 的权限? cp3_Hex=0F0200&cp2_Hex=000000

我尝试了以下重写规则

重写规则 ^/fullpage.php%3F(.*)$ /fullpage.php?$1

无济于事

任何想法

【问题讨论】:

  • 谁首先生成了这些链接?
  • 试试RewriteRule ^/fullpage.php\?(.*)$ /fullpage.php?$1
  • 链接由我网站的用户创建。显然,我无法控制人们如何选择链接到我的网站
  • Gerben,感谢重写规则有效

标签: apache mod-rewrite


【解决方案1】:

您几乎肯定会遇到 403 错误。 错误是因为 ?是 Windows 和 Linux 上禁止的文件/目录名称字符。这意味着当 Apache 尝试查找名为“/document/root/index.php?blah”的文件或目录时(解码后)并导致 403 错误。这是在读取 .htaccess 文件之前,因此您不能在 .htaccess 文件中使用 mod_rewrite 来覆盖此 403 错误或在 .htaccess 文件中定义的 ErrorDocument 来捕获此错误。

捕获 %3f 的唯一方法是在“VirtualHost”中使用 mod_rewrite 或 ErrorDocument,例如在 httpd-vhosts.conf 中(或主服务器配置,如果没有任何“虚拟主机”,例如在 httpd.conf 中)。

【讨论】:

  • “因为?是 Linux 上被禁止的文件/目录名称字符”什么?
猜你喜欢
  • 2021-11-08
  • 2013-09-30
  • 2015-09-15
  • 1970-01-01
  • 2017-02-26
  • 2012-03-22
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多