因Apache默认仅监听一个端口(如80),需手动配置多Listen指令、多个VirtualHost块及对应DocumentRoot,并同步修改httpd.conf、httpd-vhosts.conf和php.ini,否则会导致路由异常、PHP解析失败或MySQL冲突。

为什么不能直接用默认80端口跑多个Typecho站点
Windows下XAMPP的Apache默认只监听一个端口(通常是80或8080),httpd.conf里只有一个Listen指令生效。想在同一台机器上跑多个独立Typecho博客,比如blog1.local:8081和blog2.local:8082,就必须让Apache同时响应多个端口,并为每个端口绑定不同的DocumentRoot和ServerName。硬改hosts加泛域名或靠子目录区分(如/blog1)会破坏Typecho伪静态路由,导致后台404或文章页跳转异常。
配置多端口需修改的三个关键文件
只改httpd.conf不够,必须同步调整以下三处,否则MySQL连接、PHP解析或虚拟主机路由会出错:
-
httpd.conf:在文件末尾追加多个Listen指令(如Listen 8081、Listen 8082),再为每个端口写一个<VirtualHost *:8081>块,指定DocumentRoot "D:/xampp/htdocs/blog1"和ServerName blog1.local -
httpd-vhosts.conf(位于apache/conf/extra/):把上面的<VirtualHost>块实际放在这里,并确保httpd.conf中Include conf/extra/httpd-vhosts.conf这行没被注释 -
php.ini:若不同站点需不同PHP配置(如upload_max_filesize),不能全局改,得用SetEnvIf配合php_admin_value在<VirtualHost>里单独设——但注意XAMPP默认禁用php_admin_value,需先在httpd.conf中确认LoadModule php_module modules/libphp.so已启用且未被#注释
MySQL如何支持多站点共用或隔离
Typecho本身不强制要求独占数据库,但多站点混用同一库前缀(如都用typecho_)会导致表名冲突。更稳妥的做法是:
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
- 共用MySQL服务,但每个站点配独立数据库:用
phpmyadmin新建typecho_blog1、typecho_blog2,安装时在Typecho向导里填对应库名、用户名、密码 - 避免改
my.ini开多个MySQL实例——XAMPP不支持一键多实例,强行配置容易导致服务启动失败或端口监听混乱 - 如果某站点需要更高权限(如插件要写临时文件),在
phpmyadmin里给对应用户授SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER即可,不用给GRANT OPTION
本地访问正常但外网穿透失败的常见原因
用Cpolar或路由侠映射8081端口后,外网打不开,大概率不是Typecho问题,而是网络层拦截:
- Windows防火墙默认只放行
80和443,新增的8081等端口需手动添加入站规则:控制面板→Windows Defender防火墙→高级设置→入站规则→新建规则→端口→TCP→特定本地端口8081,8082→允许连接 - Cpolar隧道的“本地地址”必须填
127.0.0.1:8081,不能只填8081;填错会导致请求根本没发到Apache - 浏览器缓存可能记住旧的
localhost重定向,测试时用隐身窗口或清空DNS缓存(ipconfig /flushdns)
多端口部署真正麻烦的不是配置本身,而是每次启停Apache时,所有端口必须一起生效——没法单独重启某一个站点。如果某个博客临时维护,只能靠<VirtualHost>里加Redirect 302 / https://maintenance.example.com/来软隔离。

















