apache2:获取已注册处理程序的列表

apache2:获取已注册处理程序的列表

是否有可能从 apache 获取所有处理程序的列表?使用设置处理器可以创建处理程序。

一种可能的用法是添加针对特定文件扩展名的处理程序(添加处理程序)。了解所有可能的处理程序及其标识符将简化将它们与文件扩展名进行匹配的过程(或者在 URL 处理程序创建可能的 URL 列表的情况下)。

处理程序必须在 apache 核心中以某种列表的形式进行管理 - 如何才能获取此列表?

答案1

Apache 没有公开已配置的处理程序列表。不使用apachectl,也不与其他任何东西一起使用。

我能找到的最好的方法获取已配置的处理程序列表只是 grep Apache 配置文件夹来Handler捕获所有AddHandlerSetHandler声明。

对于基于 Debian (Ubuntu) 的主机

$ grep -ir "Handler" /etc/apache2/*
mods-enabled/php5.conf: SetHandler application/x-httpd-php
mods-enabled/php5.conf: SetHandler application/x-httpd-php-source
apache2.conf:           SetHandler server-status
mods-available/info.conf:    SetHandler server-info
mods-available/ldap.conf:    SetHandler ldap-status
mods-available/status.conf:  SetHandler server-status
mods-available/php5.conf:    SetHandler application/x-httpd-php
mods-available/php5.conf:    SetHandler application/x-httpd-php-source
sites-available/default:     AddHandler cgi-script .cgi
sites-enabled/000-default:   AddHandler cgi-script .cgi

对于基于 Redhat (Fedora、CentOS) 的主机

$ grep -ir "Handler" /etc/httpd/*
conf.d/php.conf:  AddHandler php5-script .php
conf/httpd.conf:  #AddHandler cgi-script .cgi
conf/httpd.conf:  #AddHandler send-as-is asis
conf/httpd.conf:  AddHandler type-map var
conf/httpd.conf:  #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
conf/httpd.conf:     AddHandler type-map var
conf/httpd.conf:#    SetHandler server-status
conf/httpd.conf:#    SetHandler server-info
conf.d/fcgid.conf:   AddHandler fcgid-script fcg fcgi fpl
conf.d/perl.conf:#   SetHandler perl-script
conf.d/perl.conf:#   SetHandler perl-script

请注意,并非所有找到的处理程序实际上都已注册!mods-enabled在(Debian)中搜索并忽略以 开头的行#,以仅缩小已注册的处理程序的范围。

正如 Jenny 在评论中所建议的那样,注释行可以删除通过使用 过滤输出grep -Pv '^[^ ]*:\s*#'。以下是基于 Debian 的机器的最终命令:

$ grep -ir "Handler" /etc/apache2/* | grep -Pv '^[^ ]*:\s*#'

对于基于 Redhat 的机器:

$ grep -ir "Handler" /etc/httpd/* | grep -Pv '^[^ ]*:\s*#'

在评论用户中戈古德提供了一种额外的方法来去除注释的处理程序,从而仅返回已注册的处理程序:

// Debian or Ubuntu
$ grep -R "Handler" /etc/apache2/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

// Redhat, CentoOS, Fedora
$ grep -R "Handler" /etc/httpd/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

答案2

这不完全是您想要的,但如果您server-info在配置中启用处理程序,输出将告诉您哪些模块有处理程序,哪些没有,如下所示:

Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....

这是 Apache 2.2,因此也许更高版本会为您提供更有用的输出。

相关内容