XAMPP中运行多个TYPO3站点需复用同一Apache实例,通过VirtualHost+不同端口(如8081/8082)隔离:一、在httpd.conf中添加Listen 8081和Listen 8082,并启用httpd-vhosts.conf;二、为每个站点设独立DocumentRoot(如typo3-site-a/Web)和SetEnv FLOW_CONTEXT;三、各站点须分库(如typo3_site_a、typo3_site_b),避免be_sessions等系统表冲突;四、调大realpath_cache_size至4M、opcache.memory_consumption至128M并设revalidate_freq≥2,防止缓存干扰。

Windows 下用 XAMPP 同时跑多个 TYPO3 站点,最直接的办法不是“开多个 Apache”,而是复用同一 Apache 实例,靠 VirtualHost + 不同端口(或域名)隔离。否则容易触发端口冲突、PHP 进程混用、缓存交叉污染等问题。
如何配置 Apache 监听额外端口
默认 XAMPP 只监听 80(HTTP)和 443(HTTPS)。要支持多端口(比如 8081、8082),必须显式声明:
- 编辑
XAMPP\apache\conf\httpd.conf - 找到
Listen 80行,在其下方新增:Listen 8081Listen 8082 - 确保
Include conf/extra/httpd-vhosts.conf未被注释(即启用虚拟主机)
改完重启 Apache。不加 Listen 行,VirtualHost *:8081 会静默失效,浏览器直接报连接被拒绝。
每个 TYPO3 站点需独立 DocumentRoot 和 FLOW_CONTEXT
不能把多个 TYPO3 项目放在同一个 htdocs 子目录下共用一套 index.php —— Flow 框架的上下文(FLOW_CONTEXT)和临时文件路径(Data/Temporary)会互相覆盖。
- 为每个站点建独立目录,例如:
E:/xampp/htdocs/typo3-site-a/、E:/xampp/htdocs/typo3-site-b/ - 在
httpd-vhosts.conf中分别定义:<virtualhost></virtualhost>DocumentRoot "E:/xampp/htdocs/typo3-site-a/Web"SetEnv FLOW_CONTEXT Development<virtualhost></virtualhost>DocumentRoot "E:/xampp/htdocs/typo3-site-b/Web"SetEnv FLOW_CONTEXT Production -
Web是 TYPO3 的 Web 根目录(含index.php),不是项目根目录
漏掉 SetEnv FLOW_CONTEXT 会导致所有站点共享同一套缓存和日志路径,开发时改一个站点的模板,另一个站点可能意外刷新样式。
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
避免 realpath_cache 和 opcache 跨站点干扰
XAMPP 全局 PHP 配置对所有端口生效,但 TYPO3 多实例下,realpath_cache_size 和 opcache 若设置过小或未隔离,会出现「文件找不到」或「类加载失败」——尤其当两个站点使用不同版本的 TYPO3 或扩展时。
- 在每个站点的
Web/index.php开头手动覆写:ini_set('realpath_cache_size', '4M');ini_set('opcache.enable', '1'); - 或在对应
VirtualHost块中用php_admin_value(需 Apache 启用mod_php):php_admin_value realpath_cache_size "4M"php_admin_value opcache.memory_consumption "128" - 务必确认
opcache.revalidate_freq≥ 2,否则修改 PHP 文件后需等几秒才生效,调试体验极差
Windows 下 realpath_cache_size 默认仅 256K,而 TYPO3 v10+ 单站点就可能生成超千个缓存条目,不调大会频繁触发 stat() 系统调用,拖慢响应。
数据库必须分库,不能共用同一个 database name
TYPO3 安装时若都指向 typo3_db,即使 LocalConfiguration.php 中表前缀不同(如 tx_sitea_ / tx_siteb_),be_sessions、cache_* 等系统表仍会冲突 —— 因为这些表名不受前缀控制。
- 用 phpMyAdmin 或命令行分别为每个站点创建独立数据库:
typo3_site_a、typo3_site_b - 安装时在
Install Tool或composer create-project参数中指定不同--database-name - 检查生成的
typo3conf/LocalConfiguration.php中DB/connection/dbname是否严格对应
共用数据库最隐蔽的后果是后台登录态串扰:站点 A 登录后,站点 B 的 be_sessions 表可能被清空或覆盖,导致反复跳登录页。

















