![mod_rewrite 指令阻止访问 mod_status](https://linux22.com/image/698591/mod_rewrite%20%E6%8C%87%E4%BB%A4%E9%98%BB%E6%AD%A2%E8%AE%BF%E9%97%AE%20mod_status.png)
我想启用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 的另一个例子,从而造成混淆。