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


10

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

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

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

Answers:


2

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*#'

在注释中,用户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'

2
要摆脱已注释掉的处理程序,请使用一些find和grep魔术:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@JennyD:我认为这样可以删除声明后的带有注释的行,例如AddHandler cgi-script .cgi # Ben needs CGI
dotancohen

1
真正。您可以使用egrep一个合适的正则表达式来完成它,这是读者的一项练习(不幸的是,我现在必须做一些有偿工作...)
Jenny D

@JennyD:接受挑战!我为注释行添加了grep过滤器。好主意,谢谢!
dotancohen

为什么突然降票?这个答案直接回答了这个问题,甚至包括两个最常见的Linux变体的示例。如果答案能够得到改善,我将赞赏一些建设性的批评。
dotancohen

0

这不是您想要的,但是如果您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提供给您的静态页面。
dotancohen 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.