是否有可能从apache获取所有处理程序的列表?使用setHandler可以创建处理程序。
一种可能的用法是为特定文件扩展名添加处理程序(addHandler)。了解所有可能的处理程序及其标识符将简化将它们与文件扩展名匹配的过程(或者在URL处理程序创建可能的URL列表的情况下)。
处理程序必须以某种列表的形式在apache核心中进行管理-如何获得此列表?
是否有可能从apache获取所有处理程序的列表?使用setHandler可以创建处理程序。
一种可能的用法是为特定文件扩展名添加处理程序(addHandler)。了解所有可能的处理程序及其标识符将简化将它们与文件扩展名匹配的过程(或者在URL处理程序创建可能的URL列表的情况下)。
处理程序必须以某种列表的形式在apache核心中进行管理-如何获得此列表?
Answers:
Apache不会公开已配置处理程序的列表。不使用apachectl
,不使用其他任何东西。
我可以找到获取已配置处理程序列表的最佳方法是,简单地grep Apache配置文件夹Handler
以捕获所有AddHandler
和SetHandler
声明。
$ 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
$ 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*#'
在注释中,用户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'
AddHandler cgi-script .cgi # Ben needs CGI
。
egrep
一个合适的正则表达式来完成它,这是读者的一项练习(不幸的是,我现在必须做一些有偿工作...)
这不是您想要的,但是如果您server-info
在配置中启用处理程序,则输出将告诉您哪些模块具有处理程序,哪些没有处理程序,如下所示:
Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....
这是与Apache 2.2一起使用的,因此也许更高的版本将为您提供更多有用的输出。
server-info
。但是请注意,输出是从真实服务器复制并通过Raspberry Pi提供给您的静态页面。
find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler