PHP待办应用部署Apache时访问public外文件出现404错误
问题分析与解决
核心原因
你的Apache服务器DocumentRoot大概率设置为public文件夹,这意味着浏览器只能访问public目录下的资源,而src与public同级,属于Web根目录之外的区域,直接通过URL请求src/create.php会被Apache拦截,返回404错误。Xdebug实时服务器默认将项目根目录作为Web根,因此能正常访问src下的文件。
解决方案
方案1:调整Apache的Web根目录(快速临时解决)
- 打开Apache的
httpd.conf配置文件(通常在Apache24/conf目录下) - 找到
DocumentRoot和对应的<Directory>配置,将路径修改为你的项目根目录(包含public、src、database的文件夹):
DocumentRoot "C:/你的项目路径" <Directory "C:/你的项目路径"> AllowOverride All Require all granted </Directory>
- 重启Apache服务,然后将表单的
action改为src/create.php即可正常访问。
方案2:规范项目结构(推荐,符合Web安全规范)
Web项目通常将public作为唯一的Web访问入口,避免暴露后端逻辑文件。可以按以下步骤调整:
- 在
public目录下新建create.php文件,内容为:
<?php // 引入src目录下的处理逻辑 include_once __DIR__ . '/../src/create.php'; ?>
- 将原表单的
action属性修改为create.php:
<form method="POST" action="create.php">
- 同时修改
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
相关产品推荐
相关产品推荐

