纯原生PHP路由问题求助:访问指定路径返回错误
原生PHP路由问题解决方案
核心问题:请求URI包含项目前缀
你的项目放在XAMPP的htdocs/test文件夹下,访问路径比如http://localhost/test/product时,$_SERVER['REQUEST_URI']的值是/test/product,而你的switch判断的是/product,自然匹配失败返回404。
解决步骤:
- 处理请求URI,移除项目前缀
修改index.php中的代码,先提取去除项目前缀后的路径:
<?php // 获取项目根目录的URI前缀,这里是/test $basePath = '/test'; $request = $_SERVER['REQUEST_URI']; // 移除前缀,得到纯净的路由路径 if (str_starts_with($request, $basePath)) { $request = substr($request, strlen($basePath)); } // 如果移除后为空,说明访问的是根路径 if ($request === '') { $request = '/'; } switch ($request) { case "/": require "home.php"; break; case "/dashboard": require "dashboard.php"; break; case "/product": require "product.php"; break; default: http_response_code(404); // 可按需添加404页面引入 // require "404.php"; break; } ?>
确认.htaccess的位置
确保.htaccess文件放在htdocs/test文件夹下,和index.php同级,不要放在htdocs根目录。开启XAMPP的重写模块
- 打开XAMPP控制面板,点击Apache的
Config按钮,选择httpd.conf - 找到
#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的#注释 - 保存文件,重启Apache服务
- 检查Apache的AllowOverride设置
在httpd.conf中找到对应项目目录的配置(或全局Directory配置),确保AllowOverride All,否则.htaccess不会生效:
<Directory "你的XAMPP路径/htdocs/test"> AllowOverride All Require all granted </Directory>
如果找不到单独的test目录配置,找到<Directory "你的XAMPP路径/htdocs">,把里面的AllowOverride None改成AllowOverride All,然后重启Apache。
测试验证
修改完成后重启Apache,访问http://localhost/test应加载home.php,http://localhost/test/product加载product.php,错误路径返回404。
内容的提问来源于stack exchange,提问作者karlo292
相关产品推荐
相关产品推荐

