VertrigoServ 2.68 基于 Apache 2.2,需用 Order/Allow 指令而非 Require;配置 Alias 虚拟目录时须启用 mod_alias、设置 AllowOverride All,并显式添加 PHP 处理器(如 SetHandler),避免与 VirtualHost 冲突。

VertrigoServ 是一个集成包,自带 Apache 2.x、PHP 5.x(注意:2.68 版本捆绑的是 PHP 5.4 或 5.5,不支持 PHP 7+),配置虚拟目录时不能套用现代 Apache 的语法(比如 Require all granted),必须匹配它实际加载的模块和权限模型(Apache 2.2 风格)。
确认 VertrigoServ 使用的是 Apache 2.2 权限语法
VertrigoServ 2.68 基于 Apache 2.2(不是 2.4),所以所有 <directory></directory> 块里不能用 Require all granted,否则启动失败或 403 错误。
错误现象:Apache 启动后立即退出,或访问时返回 Forbidden,日志中出现类似:
Invalid command 'Require', perhaps misspelled or defined by a module not included in the server configuration
必须改用 Apache 2.2 的 Order/Allow 指令:
-
Order allow,deny Allow from all
同时确保 mod_alias 已启用(默认开启),否则 Alias 指令无效。
在 httpd.conf 中添加 Alias 虚拟目录(非虚拟主机)
适用于想让某个路径(如 /phpmyadmin 或 /tools)指向项目外的独立目录,而不是整个站点换根。
立即学习“PHP免费学习笔记(深入)”;
- 打开
C:\Program Files\VertrigoServ\Apache\conf\httpd.conf(路径以你实际安装为准) - 在文件末尾(
Include conf/extra/httpd-vhosts.conf之前)插入:
Alias /myapp "C:/myproject/public"
<Directory "C:/myproject/public">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>- 注意:
-
/myapp是浏览器访问路径(<a href="https://www.php.cn/link/215b64d69046dea9cf81553763cecc92">https://www.php.cn/link/215b64d69046dea9cf81553763cecc92</a>) - 路径分隔符统一用正斜杠
/,Windows 路径中的反斜杠要写成C:/myproject/public - 如果该目录下有
.htaccess(如 Laravel 的重写规则),AllowOverride All必不可少
-
验证 PHP 解析是否对虚拟目录生效
Alias 目录本身不会自动继承 PHP 处理逻辑——尤其是 VertrigoServ 默认只对 .php 文件在 DocumentRoot 下做解析。
你需要显式声明 PHP 处理器:
- 在刚才的
<directory></directory>块内,或全局配置段中加:
AddType application/x-httpd-php .php AddHandler application/x-httpd-php .php
- 更稳妥的做法(防止 MIME 类型遗漏)是在
<directory></directory>内补一句:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>- 然后在
C:/myproject/public/下放一个info.php(内容为<?php phpinfo(); ?>),访问<a href="https://www.php.cn/link/215b64d69046dea9cf81553763cecc92info.php">https://www.php.cn/link/215b64d69046dea9cf81553763cecc92info.php</a>确认页面正常输出。
别踩 DocumentRoot 和 Alias 混用的坑
-
DocumentRoot "C:/VertrigoServ/www"是主站根目录,所有未匹配Alias或VirtualHost的请求都落这里。 - 如果你同时配了
VirtualHost(如admin.bm.com)和Alias /myapp,要注意:-
Alias是全局生效的,不受VirtualHost作用域限制 - 但如果你在某个
<virtualhost></virtualhost>块里又写了同名Alias,它会覆盖全局定义
-
- 最容易出问题的情况:
- 你在
httpd-vhosts.conf里为admin.bm.com设置了DocumentRoot "E:/www/BM/src/admin/public" - 又在
httpd.conf里写了Alias /admin "E:/www/BM/src/admin/public"
→ 两者冲突,可能造成路由混乱或静态资源 404(因为框架依赖public/为 Web 入口,而Alias没带重写规则)
- 你在
这种场景下,优先用 VirtualHost,不要叠加 Alias;若真需多路径映射,确保各 Alias 路径互不重叠、物理路径不交叉。
VertrigoServ 2.68 的 Apache 不支持 ProxyPassMatch(那是 2.4+ + mod_proxy_fcgi 才有的),所以别试图在里面配 php-fpm —— 它只走 mod_php 嵌入模式,且版本锁定在 PHP 5.x。



















