这不起作用:
ErrorDocument 401 ../../src/wrong_pwd.php
它将路径渲染为文本,并真正打印出来
../../src/wrong_pwd.php
并且不输出真实文件。
如果我输入绝对路径,它将呈现内容/var/www/home
(我真的不知道为什么,也许是 httpd.conf 中的某些内容?)
我怎样才能做到这一点?
答案1
这文档说:
URL 可以以斜线 (/) 开头,表示本地 Web 路径(相对于 DocumentRoot),也可以是客户端可以解析的完整 URL。或者,可以提供一条消息供浏览器显示。
../../src/wrong_pwd.php
不以斜线开头,所以我估计 Apache 会将其视为一条消息。看起来您无法返回超出范围的文档,DocumentRoot
因此我怀疑您想要的永远不会起作用(这是合理的;毕竟,客户端必须能够在出现错误时检索文档)。
您可能能够使用Alias
别名将错误页面定位到文档根目录之外的位置。例如:
Alias /error/wrong_pwd.php /path/to/src/wrong_pwd.php
ErrorDocument 401 /error/wrong_pwd.php
未经测试,YMMV 等。您可能需要使用 < Directory
> 块明确授予对此目录的访问权限;请参阅mod_alias文档。当然,这里有安全问题——通常你不想向世界公开你的源代码。(如果是这样的话,也许你可以制作一个轻量级的、网络可见的 PHP 包装器,其中include()s
... /path/to/src/wrong_pwd.php
)
答案2
您尝试过符号链接吗?
ln -s ../../src/wrong_pwd.php src/wrong_pwd.php