Apache虚拟主机支持PHP需三步:1.修改hosts绑定域名并启用vhosts模块;2.DocumentRoot必须指向public目录且Directory权限设为AllowOverride All、Require all granted;3.通过mod_php或php-fpm启用PHP解析,最后用phpinfo()验证。

要让 Apache 的虚拟主机真正支持 PHP,不能只改 DocumentRoot 或加个域名就完事。核心是两件事:一是让 Apache 能识别并调用 PHP 解析器,二是确保请求能精准落到 PHP 文件(尤其是框架的 public/ 目录)。下面分三块说清楚。
绑定本地域名:改 hosts + 启用 vhosts 模块
这是所有后续配置生效的前提。
- 编辑系统
hosts文件(Windows:`C:\Windows\System32\drivers\etc\hosts`;macOS/Linux:`/etc/hosts`),末尾新增一行:127.0.0.1 myapp.test(不要带空格或 http) - 打开 Apache 主配置
httpd.conf,找到这行并取消注释:Include conf/extra/httpd-vhosts.conf - 确认
vhost_alias_module已加载(搜索LoadModule vhost_alias_module,确保没被注释)
指向正确的入口目录:DocumentRoot 必须是 public
PHP 框架(Laravel、ThinkPHP 等)要求 Web 请求只进入 public/ 目录,否则路由失效、静态资源 404、.htaccess 不起作用。
- 在
httpd-vhosts.conf中配置时,DocumentRoot不能写项目根目录,必须写到public子目录:DocumentRoot "/var/www/myapp/public"(Linux)或DocumentRoot "C:/xampp/htdocs/myapp/public"(Windows) - 对应
<directory></directory>路径也要同步:<directory></directory>AllowOverride AllRequire all granted
启用 PHP 解析:按方式选 handler 或代理
Apache 本身不执行 PHP,需通过模块或代理把请求交给 PHP 引擎。
立即学习“PHP免费学习笔记(深入)”;
-
用 mod_php(适合测试):确保已加载对应版本模块(如
libphp8.5.so),然后在<virtualhost></virtualhost>内加:AddHandler application/x-httpd-php .php<filesmatch></filesmatch>SetHandler application/x-httpd-php8.5 -
用 php-fpm(推荐生产):每个站点配独立 FPM pool,在
<virtualhost></virtualhost>中代理:ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9001/var/www/myapp/public/
其中9001是该站点 pool 监听的端口或 socket 路径 - 无论哪种方式,都建议建一个
test.php(内容为<?php phpinfo(); ?>),访问myapp.test/test.php验证是否显示 PHP 信息页



















