4

我想接受特定文件夹中丢失文件的请求,并将它们重定向到该文件夹​​中的program.php

这是一个我将在不同地方大量使用的程序,我宁愿避免在 htaccess 文件中指定文件夹的名称。

我试过把:

错误文档 404 program.php

但结果是浏览器只打印出“program.php”而没有执行program.php。

我理解为什么会发生这种情况:根据http://httpd.apache.org/docs/2.0/mod/core.html上的文档,不以斜杠或 http 开头的 url 被解释为文本消息。

问题是如何绕过这个限制来访问同一个文件夹。

4

6 回答 6

3

我最终使用rewriterule 而不是 errordocument

重写引擎
重写条件 %{request_filename} !-f
rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L]

第二行验证文件不存在,以便正确显示现有图像。

于 2009-11-03T18:10:34.253 回答
2

你要:

ErrorDocument 404 /program.php

根据文档,“URL 可以以斜杠 (/) 开头,用于本地 Web 路径(相对于 DocumentRoot)。”

于 2009-11-03T17:34:05.443 回答
0

您是否尝试过(相对或绝对)路径?如果您将其设为相对,则它应该是 Web 根目录,这可能符合您的目的。

ErrorDocument 404 /program.php
于 2009-11-03T17:33:32.597 回答
0

如果您只有少量文件夹,您可能可以使用:

<Directory /path/a>
   ErrorDocument 404 /a/program.php
</Directory>
<Directory /path/b>
   ErrorDocument 404 /b/program.php
</Directory> 
<Directory /path/c>
   ErrorDocument 404 /c/program.php
</Directory>

如果这不切实际,那么您应该在根目录中只有一个 program.php,并根据 REDIRECT_URL 环境变量的内容(在 php 中为 $_SERVER['REDIRECT_URL'] )的内容做出不同的响应。

于 2009-11-03T18:02:12.180 回答
0

为什么不让一个 ErrorDocument 处理所有文件夹中的所有错误?这样可能会干净很多。然后,您可以使用 $_SERVER["REQUEST_URI"] 处理个别案例,如果我没记错的话,它应该包含原始请求。

于 2009-11-03T18:45:25.410 回答
0

这个怎么样。在您的根路径中,您设置了一个通用的 error.php 文件。然而,它所做的只是解析 REQUEST_URI,检查路径,看看那里是否有自定义的 error.php,并包含它。可以工作吧?

于 2009-11-03T20:54:40.530 回答