使用Apache2.4的大规模虚拟主机

使用Apache2.4的大规模虚拟主机,apache,mod-rewrite,virtual-hosts,mod-vhost-alias,Apache,Mod Rewrite,Virtual Hosts,Mod Vhost Alias,我想在重写规则中使用VirtualDocumentRoot设置的值 阿帕奇说: 要确定的另一件事是文档根(使用DocumentRoot配置,并通过document\u root环境变量可供CGI脚本使用)。在正常配置中,核心模块在将URI映射到文件名时使用此功能,但当服务器配置为执行动态虚拟主机时,该任务必须由另一个模块(mod_vhost_别名或mod_rewrite)接管,该模块具有不同的映射方式。这两个模块都不负责设置DOCUMENT_ROOT环境变量,因此,如果任何CGIs或SSI文档使

我想在
重写规则中使用
VirtualDocumentRoot
设置的值

阿帕奇说:

要确定的另一件事是文档根(使用DocumentRoot配置,并通过document\u root环境变量可供CGI脚本使用)。在正常配置中,核心模块在将URI映射到文件名时使用此功能,但当服务器配置为执行动态虚拟主机时,该任务必须由另一个模块(mod_vhost_别名或mod_rewrite)接管,该模块具有不同的映射方式。这两个模块都不负责设置DOCUMENT_ROOT环境变量,因此,如果任何CGIs或SSI文档使用它,它们将获得误导性的值

参考文档,我似乎无法在
重写规则
中使用
%{DOCUMENT\u ROOT}
。但在寻找替代解决方案后,我发现这个(标题:DOCUMENT_ROOT环境变量与VirtualDocumentRoot设置不正确)表示它已“在2.4.1中修复”

我使用的是Apache的最新(稳定)版本:

$ httpd -v
Server version: Apache/2.4.9 (Unix)
Server built:   Jun 18 2014 03:07:48
。。。但这似乎对我不起作用。测试时,
%{DOCUMENT\u ROOT}
具有httpd.conf中DocumentRoot设置的默认值。我希望
%{DOCUMENT\u ROOT}
(或我可以使用的任何其他变量)由
VirtualDocumentRoot
动态设置

以下是我想在httpd-vhosts.conf中使用的内容:

<VirtualHost *:8080>
    ServerName dev
    ServerAlias *.dev

    VirtualDocumentRoot "/usr/local/var/www/.dev/%-2+"

    RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1" [P]
</VirtualHost>
<VirtualHost *:8080>
    ServerName dev
    ServerAlias *.dev

    VirtualDocumentRoot "/usr/local/var/www/.dev/%-2+"

    RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1" [P]
</VirtualHost>

服务器名开发
ServerAlias*.dev
VirtualDocumentRoot“/usr/local/var/www/.dev/%-2+”
重写规则^/(.\.php(/.*)$”fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1“[P]

有解决办法吗?

在与(感谢您的时间和帮助)一起研究了许多方向后,我终于找到了解决办法。正如我在中所说,它不是100%完美,但对我来说已经足够好了

为了清楚起见,我希望在httpd-vhosts.conf中包含以下内容:

<VirtualHost *:8080>
    ServerName dev
    ServerAlias *.dev

    VirtualDocumentRoot "/usr/local/var/www/.dev/%-2+"

    RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1" [P]
</VirtualHost>
<VirtualHost *:8080>
    ServerName dev
    ServerAlias *.dev

    VirtualDocumentRoot "/usr/local/var/www/.dev/%-2+"

    RewriteRule ^/(.*\.php(/.*)?)$ "fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/$1" [P]
</VirtualHost>
如果你想办法“仅配置”,请留下评论,我将用你的贡献编辑我的答案