.htaccess 中的 ErrorDocument,是否可以使用相对路径?

.htaccess 中的 ErrorDocument,是否可以使用相对路径?

这不起作用:

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

相关内容