You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP待办应用部署Apache时访问public外文件出现404错误

问题分析与解决

核心原因

你的Apache服务器DocumentRoot大概率设置为public文件夹,这意味着浏览器只能访问public目录下的资源,而src与public同级,属于Web根目录之外的区域,直接通过URL请求src/create.php会被Apache拦截,返回404错误。Xdebug实时服务器默认将项目根目录作为Web根,因此能正常访问src下的文件。

解决方案

方案1:调整Apache的Web根目录(快速临时解决)

  1. 打开Apache的httpd.conf配置文件(通常在Apache24/conf目录下)
  2. 找到DocumentRoot和对应的<Directory>配置,将路径修改为你的项目根目录(包含public、src、database的文件夹):
DocumentRoot "C:/你的项目路径"
<Directory "C:/你的项目路径">
    AllowOverride All
    Require all granted
</Directory>
  1. 重启Apache服务,然后将表单的action改为src/create.php即可正常访问。

方案2:规范项目结构(推荐,符合Web安全规范)

Web项目通常将public作为唯一的Web访问入口,避免暴露后端逻辑文件。可以按以下步骤调整:

  1. 在public目录下新建create.php文件,内容为:
<?php
// 引入src目录下的处理逻辑
include_once __DIR__ . '/../src/create.php';
?>
  1. 将原表单的action属性修改为create.php:
<form method="POST" action="create.php">
  1. 同时修改src/create.php中的跳转路径,因为当前请求入口在public下,跳转路径改为:
// 错误跳转
header("Location: index.php?create=error".urlencode("Invalid title"));
// 成功跳转
header("Location: index.php?create=success");

方案3:允许Apache访问src目录(不推荐,存在安全风险)

如果必须直接访问src目录,可以在httpd.conf中添加权限配置:

<Directory "C:/你的项目路径/src">
    AllowOverride All
    Require all granted
</Directory>

重启Apache后,将表单的action改为../src/create.php(因为当前页面在public目录,相对路径需回退到上级目录)。

额外检查

  • 查看Apache的错误日志(Apache24/logs/error.log),可以获取更详细的404错误信息,确认路径是否匹配。
  • 确保文件夹和文件的权限在Windows下设置正确,Apache进程有读取权限。

内容的提问来源于stack exchange,提问作者Jer.Hazelnut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:24:27