Назад | Перейти на главную страницу

Как я могу использовать DocumentRoot и server-status на виртуальном хосте Apache?

У меня эта настройка виртуального хоста является первой в списке виртуальных хостов. это

<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 всегда нажимайте /index.php через правила перезаписи в /www/drupal5/.htaccess. Если я удалю объявление DocumentRoot, запросы / server-status будут работать нормально, но тогда сайт будет вообще недоступен http://localhost/.

Как я могу получить http://localhost/server-status работать, а также сайт загружать на http://localhost/ ?

Нашел решение, когда я googledd 'server-status mod_rewrite'. По совпадению, на форуме drupal ответили: http://drupal.org/node/52511

Добавление RewriteCond %{REQUEST_URI} !=/server-status к правилу перезаписи для перенаправления всего трафика на /index.php исправил это.

Очень сбивает с толку то, что mod_rewrite может переписать uri, для которого уже установлен обработчик.

Если вы используете Apache 2.3 или выше, вы также сможете использовать END в записи VirtualHost, чтобы избежать изменения файлов .htaccess.

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

Должен помешать последующим правилам переписывать вещи.

Просто добавьте пустую запись vhost в начало файла конфигурации vhost, например.

<VirtualHost *:80>
</VirtualHost>