如何在 Apache 虚拟主机中使用 DocumentRoot 和服务器状态?

如何在 Apache 虚拟主机中使用 DocumentRoot 和服务器状态?

我将此虚拟主机设置为虚拟主机列表中的第一个。它是

<VirtualHost localhost:80>
ServerName localhost
DocumentRoot "/www/drupal5"

<Location /server-status>
    SetHandler server-status
    Order Deny,Allow
    Allow from localhost
</Location>
</VirtualHost>

其余虚拟主机如下,并表示为 *:80。

当我将 DocumentRoot 包含在此虚拟主机中时,服务器上的请求始终http://localhost/server-status通过 /www/drupal5/.htaccess 中的重写规则命中 /index.php。如果我删除 DocumentRoot 声明,/server-status 请求可以正常工作,但该网站根本无法使用http://localhost/

我怎样才能开始http://localhost/server-status工作以及加载网站http://localhost/

答案1

当我在 Google 上搜索“server-status mod_rewrite”时,找到了解决方案。巧合的是,drupal 论坛上也有人回答过这个问题:http://drupal.org/node/52511

添加RewriteCond %{REQUEST_URI} !=/server-status重写规则以将所有流量重定向到 /index.php 即可修复该问题。

非常令人困惑的是,mod_rewrite 可以重写已经设置处理程序的 uri。

答案2

只需在 vhost 配置文件顶部添加一个空白的 vhost 条目即可,例如

<VirtualHost *:80>
</VirtualHost>

答案3

如果您使用的是 Apache 2.3 或更高版本,您还应该能够END在 VirtualHost 条目中使用该标志,以免修改 .htaccess 文件。

RewriteCond %{REQUEST_URI} /server-status
RewriteRule ^ - [END]

应该防止后续规则重写事物。

相关内容