xampp 下多端口部署 fat-free framework 完全可行,但必须在虚拟主机配置中启用 allowoverride all 并正确设置 .htaccess 的 rewritebase 和重写规则,否则因 mod_rewrite 未生效导致 404;同时注意路由路径大小写敏感问题。

直接说结论:XAMPP 下用多端口部署 Fat-Free Framework 完全可行,但必须绕开 index.php 自动路由与 Apache 默认 mod_rewrite 规则的冲突,否则 404 或重定向循环是常态。
为什么 Fat-Free 的 index.php 在多端口下容易 404
Fat-Free 默认依赖 Apache 的 mod_rewrite 模块把所有请求(除静态资源)转发给 index.php。而 XAMPP 的 httpd.conf 中,mod_rewrite 启用状态和 .htaccess 生效范围默认只作用于主 DocumentRoot(即 D:\xampp\htdocs),不自动继承到你新增的虚拟主机或端口配置里。
- 现象:访问
http://localhost:8080/about直接报 404,但http://localhost:8080/index.php/about能正常响应 - 原因:Apache 没把请求重写进
index.php,而是按路径去文件系统找/about这个目录或文件 - 解决核心:在每个端口对应的
<virtualhost></virtualhost>块里显式启用AllowOverride All,并确保对应目录下有正确.htaccess
httpd-vhosts.conf 中为 Fat-Free 配置独立端口的关键项
不要改 httpd.conf 顶部的 Listen 和全局 DocumentRoot,而是统一在 D:\xampp\apache\conf\extra\httpd-vhosts.conf 里加段落——这是 XAMPP 推荐且最不易出错的位置。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 先确认已取消该文件开头的注释:
Include "conf/extra/httpd-vhosts.conf"在httpd.conf中未被#注释掉 - 添加如下配置(以端口
8080为例,Fat-Free 项目放在D:\projects\ff-demo):<virtualhost> DocumentRoot "D:/projects/ff-demo" ServerName localhost <directory> Options Indexes FollowSymLinks AllowOverride All Require all granted </directory></virtualhost> -
AllowOverride All是关键,它允许.htaccess中的RewriteRule生效;Require all granted替代旧版Order allow,deny,避免 403
Fat-Free 项目的 .htaccess 必须适配多端口场景
XAMPP 自带的 Fat-Free 示例 .htaccess 通常假设运行在根路径(/),但如果你的项目在子目录或非标准端口,RewriteBase 必须显式声明,否则重写会失败。
- 在
D:\projects\ff-demo\.htaccess中,把默认的:RewriteBase /
改成:RewriteBase /
(注意:这里仍写/,因为浏览器访问的是http://localhost:8080/,URI 根仍是/,不是/ff-demo/) - 完整可用的最小
.htaccess内容:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] - 别漏掉
RewriteEngine On—— 很多人复制规则却忘了开引擎,导致整个重写静默失效
端口冲突和 Fat-Free 的 PHP 内置服务器可作为临时替代
如果反复修改后 8080 仍启动失败,别硬刚 Apache 配置。XAMPP 的 Fat-Free 项目完全可以跳过 Apache,用 PHP 自带的开发服务器快速验证逻辑:
- 进入项目目录:
cd D:\projects\ff-demo - 执行:
php -S localhost:8080 -t . router.php(其中router.php是 Fat-Free 的路由引导文件,内容通常为<?php require 'index.php';) - 这个方式完全绕过 Apache 和
.htaccess,适合调试路由逻辑、API 接口或 CI 流程,但不适用于需要 Apache 模块(如mod_ssl、mod_php特定行为)的生产模拟
真正容易被忽略的是:Fat-Free 的 $f3->route() 中路径匹配是大小写敏感的,而 Windows 下文件系统不敏感,但 Apache 的 mod_rewrite 规则默认区分大小写。一旦你在浏览器里输错大小写(比如 /About 而非 /about),即使代码没报错,也会触发 404 —— 这个细节几乎从不在文档里强调,但排查时耗时最长。










