apache2:登録済みハンドラーのリストを取得します


10

Apacheからすべてのハンドラーのリストを取得することは可能ですか?ではでSetHandlerハンドラを作成することが可能です。

1つの可能な使用法は、特定のファイル拡張子のハンドラーを追加することです(addHandler)。可能なすべてのハンドラーとその識別子を知っていると、それらをファイル拡張子に一致させるプロセスが簡単になります(またはURLハンドラーが可能なURLのリストを作成する場合)。

ハンドラーは、Apacheコアで何らかのリストで管理する必要があります-このリストを取得するにはどうすればよいですか?

回答:


2

Apacheは設定されたハンドラーのリストを公開しません。apachectl他のものではなく、を使用していません。

構成済みハンドラーのリスト取得するために私が見つけることができる最良の方法は、Apache構成フォルダーをgrepして、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)で検索し#、登録されたハンドラーのみを絞り込むために始まる行を無視します。

コメントでジェニーが示唆したように、コメント付きの行は、で出力をフィルタリングすることにより削除できます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
ジェニーD

@JennyD:のように、宣言の後にコメントのある行を削除すると思いますAddHandler cgi-script .cgi # Ben needs CGI
dotancohen 2015

1
そうだね。あなたがそれを行うことができegrep、読者のための運動として残っている、適切な正規表現、(残念ながら私は...今、いくつかの有給の仕事をしなければならないよう)
ジェニー・D

@JennyD:チャレンジが受け入れられました!コメント行にgrepフィルターを追加しました。いい考え、ありがとう!
dotancohen 2015

なぜ突然反対票を投じたのですか?この回答は質問に直接回答し、最も一般的な2つのLinuxバリアントの例も含まれています。答えが改善される可能性がある場合、私はいくつかの建設的な批評をいただければ幸いです。
dotancohen 2016年

0

これはあなたが望むものではありませんserver-infoが、configでハンドラーを有効にすると、次のように、出力にはどのモジュールにハンドラーがあり、どのモジュールにハンドラーがないかがわかります。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.