mod_rewrite 指令阻止访问 mod_status

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>

我有两个问题:

  • Require触发 AH01753 和 AH01630 的指令是否存在错误?

  • 是不是RewriteRule要绕过SetHandler server-status

答案1

/server-status 不是文件或目录,所以如果您坚持使用 mod_rewrite,至少要为这个 URI 添加一个条件,否则该行为是正常的。

RewriteCond %{REQUEST_URI} !^/server-status

顺便说一句,如果你去过:

FallBackResource /index.php

您现在不会遇到这个问题。这是在不需要时使用 mod_rewrite 的另一个例子,从而造成混淆。

相关内容