当我尝试通过在地址栏中输入路径来直接访问某个 php 文件时,就像这样http://www.mysite.com/path/to/my/file.php,我得到
文件未找到 Firefox 无法找到以下文件
没有其他错误,只是...如果我上传一个只回显“测试”的简单 php 文件,我就可以访问它,这两个文件位于同一个文件夹中。
VPS CentOS 5.5 apache mod_security 已启用,ASL 已安装。
两个文件的权限相同。
这有什么区别呢?
答案1
我能让 Firefox 说“文件未找到:Firefox 无法找到文件”的唯一方法是使用 file: URL,例如:“file:///tmp/does-not-exist”。因此,您提到的错误似乎表明您正在使用 file: URL 尝试访问远程计算机上的文件。也许有效的文件是您还您的工作站和服务器上都存在文件,而服务器上不存在该文件?您可以通过查看服务器日志来验证它是否确实从服务器请求了该文件(我将在下面提到)。
当 Firefox 报告“文件未找到”时,顶部 URL 栏中的 URL 是什么?是“file:”还是“http:”?如果您进入 shell 窗口或文件浏览器,您的工作站上是否存在具有您尝试访问的任一名称的文件(有效的 .php 文件或无效的文件)?
您使用的 URL 应如下所示:http://服务器主机名.example.com/文件名
这里有一些其他使用服务器日志的常规 Apache 故障排除想法,它们可能会提供更多信息并验证您是否真正访问了服务器。
首先要查看 Apache 错误日志,通常在“/var/log/httpd/error_log”中。尝试访问出现错误的文件,然后查看 error_log 和“/var/log/httpd/access_log”,看看它们包含与该请求相关的内容。请注意,如果您对 Apache 进行了配置更改,并且正在从其他目录提供文件,则您的错误/访问日志可能位于不同的位置。
通常,如果是服务器上的权限问题,Firefox 会响应“您无权访问此服务器”。error_log 会显示“(13)权限被拒绝”。在这种情况下,您可能只需要“chmod 644”,以便 Web 服务器可以读取它。如果这不起作用,有时是 SELinux 阻止了访问。您可以通过运行“setenforce 0”并尝试再次访问该文件来测试。如果现在成功,则问题与 SELinux 有关。完成后使用“setenforce 1”重新启用 SELinux。
如果无法将 URL 与文件系统上的文件匹配,则 Firefox 通常会响应“未找到:在此服务器上未找到请求的 URL”,并且 error_log 会显示“文件不存在”。这通常是由命名或拼写错误引起的,请根据文件系统中的文件名验证日志中的内容。
答案2
除非 Firefox 本身直接在 VPS 上运行,而不是在您的 PC 上运行,否则任何直接文件访问 URL(如 file://some/path/filename.php)都将在错误的计算机上查找。
如果这不能解释您的问题,请提供有关计算机和 URL 等的更多信息。
消息“文件未找到,Firefox 无法找到文件”表明 Firefox 已被要求查看运行 Firefox 的计算机的本地文件系统(而不是通过 HTTP 等方式)。对于无法找到的文件,大多数服务器都会返回 404 和特定于服务器的消息,其中不提及“Firefox”。
您引用的消息可能是由页面中的 Javascript 错误引起的,即使是使用 HTTP 检索的页面也是如此。但可能的原因有很多。
如果服务器返回 404http://www.mysite.com/path/to/my/file.php,我会在服务器的错误日志中寻找一些有用的信息。
答案3
在进行 Web 开发或系统管理任务时,我们遇到了很多 Firefox 缓存行为问题。也许 Firefox 在完全设置之前缓存了访问 URL 的负面结果?
您可以尝试使用其他浏览器或仅使用 wget 来检索文件以消除 Firefox 缓存的影响。
答案4
感谢大家对我的问题的回答,我得以追踪问题的原因。该案例的解决方式如下:
无法打开的页面(仅返回 500 或根本没有错误)是使用已被 ASL 禁用的“proc_open”和“proc_close”的脚本。
至于为什么在任何日志中都找不到与该问题相关的任何日志条目,我还没有答案。
从 php.ini 的 disable_functions 指令中删除这两个函数后,一切都正常了。