“object not found!” 根本原因是 apache 未在 documentroot 指定路径下找到请求资源,需依次确认 documentroot 配置、url 与文件系统路径匹配、mod_rewrite 启用状态、端口及虚拟主机干扰,并查 error.log 定位真实缺失路径。

确认 DocumentRoot 是否指向正确目录
“Object not found!” 本质是 Apache 找不到请求的资源,第一反应不是代码写错,而是它压根没在你预期的位置找。XAMPP 默认的 DocumentRoot 是 C:/xampp/htdocs,但很多人把项目放到了 C:/xampp/projects/myapp 或桌面路径下,却没改配置。
检查方式:打开 C:/xampp/apache/conf/httpd.conf,搜索 DocumentRoot 和下方紧邻的 <directory></directory> 块,确保两者路径一致且真实存在。若修改了路径,必须同时更新这两处,否则会因权限拒绝而返回 403 或静默失败。
- 路径中避免中文、空格、特殊符号(如
C:my project→ 改为C:/my_project/) - Windows 下路径分隔符用正斜杠
/或双反斜杠\,单反斜杠会被 Apache 解析为转义字符 - 修改后必须重启 Apache(通过 XAMPP Control Panel),仅刷新浏览器无效
验证 URL 路径是否匹配文件系统结构
浏览器地址栏输入的是 URL 路径,Apache 按照 DocumentRoot 为根来映射到本地文件。比如访问 http://localhost/myapp/index.php,Apache 实际查找的是 [DocumentRoot]/myapp/index.php。
常见误操作:把项目整个文件夹(含 myapp/)丢进 htdocs,却用 http://localhost/index.php 访问 —— 此时它只会在 htdocs/ 下找,自然 404。
- 用文件管理器直接打开
DocumentRoot目录,对照 URL 一级级确认子目录和文件是否存在 - 区分大小写:Windows 文件系统不敏感,但 Apache 配置若启用了
EnableSendfile off或某些模块,可能意外触发类 Unix 行为;稳妥起见,URL 路径与文件名保持完全一致 - 不要依赖浏览器自动补全的
index.html—— 若目录下只有index.php,需显式写出http://localhost/myapp/index.php
检查 .htaccess 是否误拦截或重写失效
如果项目用了 Laravel、WordPress 等框架,通常依赖 .htaccess 实现 URL 重写(如隐藏 index.php)。但 XAMPP 默认禁用 mod_rewrite,且 AllowOverride 设为 None,导致 .htaccess 完全不生效,所有美化 URL 都变成 404。
解决路径:打开 httpd.conf,确认以下两处已启用:
LoadModule rewrite_module modules/mod_rewrite.so
并在对应 <directory></directory> 块中,把 AllowOverride None 改为 AllowOverride All。
- 改完必须重启 Apache,
.htaccess不支持热加载 - 语法错误的
.htaccess会导致 500 错误,而非 404;若出现 500,请临时重命名该文件测试 - 某些共享主机风格的
.htaccess规则(如RewriteBase /subdir/)在本地根目录运行时需删掉或注释掉
排除端口冲突与虚拟主机干扰
虽然 404 是资源未找到,但根源可能是 Apache 根本没收到请求——比如 Skype 占用 80 端口,或多个 VirtualHost 配置导致请求被路由到空目录。
快速验证:访问 http://localhost/,若连 XAMPP 默认欢迎页都不显示,问题不在项目本身,而在 Apache 是否正常监听。
- 在 XAMPP Control Panel 中点击
Config → Apache (httpd.conf),检查Listen 80是否被注释;若改过端口(如Listen 8080),URL 必须带端口号:http://localhost:8080/myapp/ - 搜索
httpd-vhosts.conf(位于C:/xampp/apache/conf/extra/),确认没有启用的VirtualHost指向了不存在的路径,或ServerName冲突覆盖了localhost - 临时将
vhosts文件重命名为vhosts.bak并重启 Apache,可快速排除虚拟主机干扰
真正卡住的地方往往不是哪行代码错了,而是 Apache 的请求路径映射链断在某个环节:从 URL 到 DocumentRoot,再到文件系统,中间任何一层路径偏差、权限限制或模块未启用,都会表现为干净利落的 “Object not found!”。盯住日志——C:/xampp/apache/logs/error.log 里那句 “File does not exist” 后面跟的真实路径,比猜更可靠。










