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

是否有可能,从apache获得所有处理程序的列表? 用setHandler可以创build处理程序。

一种可能的用法是为特定文件扩展名( addHandler )添加处理程序。 知道所有可能的处理程序及其标识符将会减轻将它们与文件扩展名匹配的过程(或者在URL处理程序创build可能的URL列表的情况下)。

处理程序必须在某个列表中的apache核心中进行pipe理 – 如何才能将此列表取出?

Apache不公开已configuration的处理程序列表。 不使用apachectl ,没有其他的东西。

findconfiguration的处理程序列表的最佳方法是简单地grep 处理程序的Apacheconfiguration文件夹来捕获所有的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)中search并忽略以#开始的行,以仅缩小注册的处理程序。

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

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

对于基于Redhat的机器:

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

在评论用户gogoud提供了一个额外的方式去掉注释的处理程序,因此只返回注册的处理程序:

 // 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' 

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

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

这是与Apache 2.2,所以也许以后的版本会给你更有用的输出。