XAMPP默认不支持PATH_INFO,需在httpd.conf中为项目目录添加AcceptPathInfo On并设AllowOverride All,php.ini中启用cgi.fix_pathinfo=1,.htaccess须置于public目录且DocumentRoot指向该目录,最后通过var_dump($_SERVER['PATH_INFO'])验证。

XAMPP 默认不支持 PATH_INFO,ThinkPHP、Yii 等框架的 index.php/控制器/方法 这类路由会直接 404 或退化为 GET 参数模式——这不是框架写错了,是 Apache + PHP 的协作链断在了中间。
Apache 必须显式开启 AcceptPathInfo
即使 URL 写成 http://localhost/index.php/user/info/id/123,Apache 默认会忽略斜杠后的内容,不把它塞进 $_SERVER['PATH_INFO']。关键不是重写,而是“允许传递”。
- 编辑
XAMPP\apache\conf\httpd.conf(或对应虚拟主机的vhosts.conf) - 找到你项目所在的
<directory></directory>块(路径必须精确匹配) - 在里面添加一行:
AcceptPathInfo On - 不能只写在
<virtualhost></virtualhost>顶层,也不能漏掉AllowOverride All(否则 .htaccess 不生效) - 改完必须重启 Apache,
httpd -t验证配置语法无误后再重启
php.ini 必须设 cgi.fix_pathinfo=1
Apache 把路径段传过来了,但 PHP 默认不解析它——cgi.fix_pathinfo 控制的就是这一步。XAMPP 自带的 php.ini 里这行通常是注释掉或设为 0 的。
- 打开
XAMPP\php\php.ini(注意:不是 Apache 的 conf,也不是 nginx 的配置) - 搜索
cgi.fix_pathinfo,确保它是:cgi.fix_pathinfo=1(不是On,不是off,必须是数字 1) - 保存后,**必须重启整个 XAMPP 的 PHP 服务**(仅重启 Apache 不管用)
- 建个
test.php验证:<?php var_dump($_SERVER['PATH_INFO'] ?? 'not set'); ?>,访问http://localhost/test.php/a/b/c应输出string(7) "/a/b/c"
ThinkPHP 的 .htaccess 要适配 XAMPP 实际路径
很多人把官方 .htaccess 直接扔进项目根目录就以为完事了,结果 500 或 404——因为 XAMPP 默认 DocumentRoot 是 htdocs,而 ThinkPHP 6+ 要求入口在 public/ 目录下,.htaccess 放错位置或规则没对齐就会失效。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
立即学习“PHP免费学习笔记(深入)”;
-
.htaccess必须放在public/目录内(不是项目根目录),且DocumentRoot指向该 public 目录 - 确认
httpd.conf中对应目录块含:Options FollowSymLinks(缺它会导致 500 错误) - 推荐使用 ThinkPHP 官方精简版规则(避免 MultiViews 冲突):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] - 如果用了虚拟主机,
ServerName必须和 hosts 文件映射一致,否则 Apache 可能走默认站点配置,绕过你的规则
常见失败组合与绕过验证点
PATH_INFO 失效往往不是单点问题,而是多个环节同时卡住。别只查一个配置文件,要逐层验证。
- 访问
http://localhost/phpinfo.php,搜mod_rewrite和cgi.fix_pathinfo—— 两者都得出现且值正确 - 检查
$_SERVER['PATH_INFO']是否为空,而不是直接看页面是否 404;空说明底层环境没通,跟框架路由逻辑无关 - XAMPP 8.2+(PHP 8.2)搭配 ThinkPHP 5.1 或更老版本时,
create_function已被移除,会报致命错误——这不是 PATH_INFO 问题,但容易被误判 - Windows 下路径分隔符必须用正斜杠
/,ThinkPHP 的URL_PATHINFO_DEPR是 ThinkPHP 3.x 的旧配置项,TP5/6 已弃用,别在 config 中硬设
PATH_INFO 不是开关一开就自动好用的机制,它是 Apache、PHP、框架三者之间一条脆弱的协议链。任一环松动,index.php/user/list 就会变成 404 或降级成 ?s=user/list。验证时盯住 $_SERVER['PATH_INFO'] 这个变量,它才是唯一真相。其他都是表象。


















