我一直在自定义 Apache 项目中的所有错误页面。一切似乎都正常,直到出现 403 Forbidden 错误。当我通过 URL 发送通配符(例如空格或星号)时,自定义错误页面不会显示。
http://localhost:8080/*
如果 403 错误是由其他原因引起的(例如访问了禁止的文件),则不会出现此错误,并且自定义错误页面会正确加载。我的“.htaccess”代码是:
ErrorDocument 403 /index.php/%{REQUEST_URI}
有人遇到同样的问题吗?我该如何解决?我可以禁用特殊字符以避免该错误吗?任何答案都值得赞赏。
答案1
当我通过 URL 发送通配符(例如空格或星号)时,不会显示自定义错误页面。
在旁边:“空白处”不是通配符字符,但如果请求的 URL 路径以空间(即%20
当 URL 经过编码时)这确实是一个无效请求 - 请参阅下面的#1。
这里有两个问题...
Apache 将触发 403早期的如果URL 路径中存在某些无效字符(例如 、
*
、:
) 。在某些方面,这取决于操作系统。如果文件名中不允许出现该字符(根据底层操作系统),则在将请求映射到文件系统时会触发 403。"
发生这种情况前
.htaccess
被处理。因此,如果你定义ErrorDocument
晚的那么.htaccess
你的自定义错误文档就不会被调用。但是如果你定义了ErrorDocument
早期的在服务器配置(或 VirtualHost)中应该接到电话。
在旁边:
ErrorDocument 403 /index.php/%{REQUEST_URI}
您无需明确将请求的 URL 传递给index.php
脚本。在 PHP 中,这可以在$_SERVER['REDIRECT_URL']
错误文档中的超全局变量中使用。
请注意,$_SERVER['REQUEST_URI']
PHP 超全局变量不一定与名称相似的REQUEST_URI
Apache 服务器变量相同。PHP 变量包含查询字符串,而 Apache 变量不包含。