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

Директивы mod_rewrite предотвращают доступ к mod_status

Я хочу включить mod_status для себя в моем окне разработки Windows 10, где я запускаю Apache / 2.4.6. Я использую виртуальные хосты на основе имен, и у меня есть хост по умолчанию, который указывает на страницу «Сайт не существует»:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Sites/Default/htdocs"
    ErrorLog "logs/localhost-error.log"
    CustomLog "logs/localhost-access.log" common

    <Directory "C:/Sites/Default/htdocs">
        Require all granted
        AllowOverride All
        Options -Indexes
    </Directory>
</VirtualHost>

Я загружаю все необходимые модули (mod_authz_core, mod_authz_host, mod_info и mod_status), но ни один из моих Require директивы работали:

<Location /server-status>
    SetHandler server-status
    
    # AH01753: access check of 'localhost' to /server-info failed, reason: unable to get the remote host name
    #Require host localhost
    
    # AH01630: client denied by server configuration
    Require ip 127.0.0.1

    # ... but this:    
    Require all granted
</Location>

Даже предоставляя бесплатный доступ всем, я получал свой по умолчанию index.php страница из-за наличия этого на моем хосте по умолчанию:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

У меня два вопроса:

/ server-status не является файлом или каталогом, поэтому, если вы настаиваете на использовании mod_rewrite, по крайней мере, добавьте условие для этого URI, в противном случае такое поведение является нормальным.

RewriteCond %{REQUEST_URI} !^/server-status

Кстати, если вы зашли в:

FallBackResource /index.php

Теперь у вас не было бы этой проблемы. Это еще один пример использования mod_rewrite, когда он не нужен, вызывая путаницу.