apache 忽略位置指令

Put*_*nik 1 apache-2.2

我取消了默认部分的注释:

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 
</Location>
Run Code Online (Sandbox Code Playgroud)

然后重新启动 apache('语法正常')

当我运行时,links http://127.0.0.1/server-status我看到 404 错误页面。

# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
_default_:443          site.com (/etc/httpd/conf.d/ssl.conf:74)
*:80                   is a NameVirtualHost
         default server site.com (/etc/httpd/sites-enabled/www.site.com.conf:1)
         port 80 namevhost site.com (/etc/httpd/sites-enabled/www.site.com.conf:1)
                 alias www.site.com
Syntax OK
Run Code Online (Sandbox Code Playgroud)

我也尝试将'Location'块插入<VirtualHost>并使用域名而不是127.0.0.1但没有运气。

我通过故意输入不正确的指令来检查我是否在正确的配置文件中,这是正确的文件。

我究竟做错了什么?

JW.*_*JW. 5

我遇到了同样的问题,看起来原因很相似:我的应用程序有一个 .htaccess 文件,其中包含以下内容:

RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

这优先于位置部分。它正在重写所有不指向实际文件的 URL,这包括服务器状态。通过在 RewriteRule 之前添加另一个 RewriteCond,我能够修复它:

RewriteCond %{REQUEST_URI} !=/server-status
Run Code Online (Sandbox Code Playgroud)

另一种方法是添加一个别名,将您的服务器状态 URL 映射到一个不同的目录,一个不使用 .htaccess 文件的目录。看起来这甚至可以是一个不存在的目录:

Alias /server-status /tmp/dummy
Run Code Online (Sandbox Code Playgroud)

从 httpd 2.2 更新到 2.4 时,我还必须授予对这个虚拟目录的访问权限:

<Directory /tmp/dummy>
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)