当 URL 中有通配符时,不会显示自定义 403 错误页面

当 URL 中有通配符时,不会显示自定义 403 错误页面

我一直在自定义 Apache 项目中的所有错误页面。一切似乎都正常,直到出现 403 Forbidden 错误。当我通过 URL 发送通配符(例如空格或星号)时,自定义错误页面不会显示。

http://localhost:8080/*

如果 403 错误是由其他原因引起的(例如访问了禁止的文件),则不会出现此错误,并且自定义错误页面会正确加载。我的“.htaccess”代码是:

ErrorDocument 403 /index.php/%{REQUEST_URI}

有人遇到同样的问题吗?我该如何解决?我可以禁用特殊字符以避免该错误吗?任何答案都值得赞赏。

答案1

当我通过 URL 发送通配符(例如空格或星号)时,不会显示自定义错误页面。

在旁边:“空白处”不是通配符字符,但如果请求的 URL 路径以空间(即%20当 URL 经过编码时)这确实是一个无效请求 - 请参阅下面的#1。

这里有两个问题...

  1. Apache 将触发 403早期的如果URL 路径中存在某些无效字符(例如 、*:) 。在某些方面,这取决于操作系统。如果文件名中不允许出现该字符(根据底层操作系统),则在将请求映射到文件系统时会触发 403。"

  2. 发生这种情况 .htaccess被处理。因此,如果你定义ErrorDocument 晚的那么.htaccess你的自定义错误文档就不会被调用。但是如果你定义了ErrorDocument 早期的在服务器配置(或 VirtualHost)中应该接到电话。


在旁边:

ErrorDocument 403 /index.php/%{REQUEST_URI}

您无需明确将请求的 URL 传递给index.php脚本。在 PHP 中,这可以在$_SERVER['REDIRECT_URL']错误文档中的超全局变量中使用。

请注意,$_SERVER['REQUEST_URI']PHP 超全局变量不一定与名称相似的REQUEST_URIApache 服务器变量相同。PHP 变量包含查询字符串,而 Apache 变量不包含。

相关内容