- ベストアンサー
Cのソースをapacheがコンパイル
httpd.confに<IfModule mod_alias.c>などと書いてありますが、これらはCのソースですよね? apacheがmod_alias.cを見つけることができたらapacheが起動時にデフォルトコンパイラを使ってコンパイルするという意味なんでしょうか? <IfModule mod_alias.exe>や<IfModule mod_alias.dll>であれば何の疑問もありません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なぜ<IfModule mod_alias.so>や<IfModule mod_alias.dll>でないのかについて考えたので追加させてください。 LoadModuleでmod_****.soとかmod_****.dll(古いWindows用のApacheはこれでした)を後で追加できるようになったのはApache1.3からでした。 Apache1.2ではmoduleの追加をするためにはApacheそのものをコンパイルしなおさないといけなかったのでmod_****.soというファイル自体が存在しなかったのです。 今でもApache自体にmoduleを組み込んでコンパイルできるのでmod_****.soというファイルの有無だけではmuduleが使えるかどうかの判断は出来ないということになります。 そのためApache組み込みのmoduleではコンパイル時のファイル名をリストに登録するようになっているのだと思います。 またApache1.3ではLoadModuleと別にAddModuleでこのファイル名を登録する必要がありました。 Apache2.0ではAddModuleは自動的にやってくれるのでなぜいきなりcのファイル名がでてくるのって思われるのでしょうね。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
Apacheのマニュアルより <IfModule> ディレクティブ 構文: <IfModule [!]module-name> ... </IfModule> <IfModule test>...</IfModule> セクションは、ディレクティブを条件付きで指定するために利用します。 IfModule セクションに含まれるディレクティブは、test で指定するモジュールが組み込まれているときのみ処理されます。もし test が組み込まれていなければ、開始と終了の間のディレクティブ は無視されます。 <IfModule> セクションディレクティブに指定する test は、次の二つの形式のうちの一つをとります。 * module name * !module name 前者のケースでは、もし module name と名付けられたモジュールが Apache に組み込まれていれば (コンパイル済みのものと、LoadModule を利用して動的に読み込んだものの両方)、 開始と終了の間のディレクティブが処理されます。後者の場合は逆で、 module name が組み込まれていない場合に処理されます。 module name 引数は、コンパイルをした時のモジュールのファイル名で、例えば mod_rewrite.c といった形になります。 <IfModule> セクションは入れ子にすることが可能であり、 複数のモジュールのテストを行なうために使用できます。 コンパイルした時のファイル名を書くようになっているだけですね。
補足
ありがとうございます。 apacheがすることは、mod_rewrite.cというファイルが存在するのかを確認するのではなく、自身がコンパイルされた時の記録から<IfModule mod_rewrite.c>の真偽の結果を出すということですね? !で否定ができるのは勉強になりました。
補足
mod_****.soというファイルの有無だけではmuduleが使えるかどうかの判断は出来ない理由は、mod_****.soが有ったとしても、apacheが--enable-****によってコンパイルされたものでなければ使えないからということですか? そのように思っているから、 「mod_****.soというファイルの有無だけではmuduleが使えるかどうかの判断は出来ない」の前に書いてもらった理由が理解できませんでした。 と書いたところでやっと理解できました。実行ファイルに****が含まれている場合にはmod_****.soが無いのにその機能が使えるというケースがありえるからですね。 機能が使えるかどうかは、実行ファイルのどこかにある情報であって、<IfModule mod_alias.so>の見た目で想像するファイルの有り無しで判別しているわけではないということですね。