<Location /status>
SetHandler server-status
order deny,allow
allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)
但是当我访问时http://ip:port/status
,
a404 Not Found
被举报了,为什么?
Ced*_*ght 19
当您.htaccess
在文档根目录中有一个文件并且该文件包含 时RewriteRule
,也会发生这种情况,这在CMS 漂亮 URL 中很常见。
这种行为的解释如下。该<Location>
指令首先采取行动,但该处理器没有在这个阶段叫。然后RewriteRule
设置一个处理程序,例如运行一个 PHP 脚本,所以SetHandler
最终没有任何影响。
如果这是原因,请找到RewriteRule
导致问题的原因(*),并在其之前添加:
RewriteCond %{REQUEST_URI} !=/server-status
Run Code Online (Sandbox Code Playgroud)
这以排除现有静态文件的相同方式server-status
从 URIRewriteRule
中排除。当然,您使用的代替/server-status
必须与Location
所选的完全匹配,而在问题中是/status
. (在 Apache 2.2.22 和 Apache 2.4 上测试)
附录:还要注意,server-status
如果DocumentRoot
apache 进程根本无法读取它,您可能会尝试读取 403 ,这也是因为服务器状态处理程序没有机会工作。
附录 2:如果.htaccess
Apache 默认站点的 经常被覆盖,并且/server-status
URL 是 Munin 等工作所必需的,那么创建一个<VirtualHost 127.0.0.1:80>
包含服务器状态处理程序的节在管理上可能是最简单的。
附录 3(*):RewriteRule
导致问题的可能是与 string 匹配的任何内容/server-status
。这可能是可识别的,因为第一个参数将匹配任何内容,例如从匹配任何字符的RewriteRule .
地方开始.
,或^(.*)
,或以其他方式捕获 URI,例如.*\bstatus$
. 您也可以识别它,因为它故意排除带有!-f
.
例如,如果 WordPress 是主站点并且您希望/server-status
出现在其上,并且由于某种原因上述附录 2 不适用,您可能需要插入RewriteCond
如下额外内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/server-status
RewriteRule . /index.php [L]
Run Code Online (Sandbox Code Playgroud)
但是,在任何RewriteRule
.
因为你配置错误了一些东西。您的日志对 404 的原因有何说明?我的第一个猜测是这ip:port
不是一个有效的虚拟主机(或者至少对于您放入的虚拟主机无效<Location /status>
),并且它可能会回落到默认虚拟主机。如果是这种情况,错误日志将提及您未配置的不合理路径。其他错误日志消息将意味着不同的事情,这就是检查它们如此重要的原因。
归档时间: |
|
查看次数: |
28226 次 |
最近记录: |