dポイントプレゼントキャンペーン実施中!

初めて質問させていただきます。至らない点もあるかと思いますが宜しくお願いいたします。

似たような質問を探している人がいるかもしれませんので、まず一般的な質問をさせていただきます。Apache2の設定ファイルのhttpd.confに、CustomLogという設定項目がありますが、このCustomLogの書式は
CustomLog [ログファイルパス] [書式] [env=***]
という3つの引数を取るということでいいと思うのですが、この[env=***]のところに、不一致の判定と一致の判定を指定したいのです。

例えばこんな状況です

1) SetEnvIf [判定の条件式1] [環境変数A] [環境変数X]
2) SetEnvIf [判定の条件式2] [環境変数B] [環境変数X]
3) SetEnvIf [判定の条件式3] [環境変数B] [環境変数X]
と、SetEnvIfで環境変数を2個ずつ指定した後、

CustomLog logs/[ログファイルA] combined env=[環境変数A] ←1) に一致で書き込み
CustomLog logs/[ログファイルB] combined env=[環境変数B] ←2,3) に一致で書き込み
CustomLog logs/[ログファイルX] combined env=![環境変数X] ←1,2,3) に不一致で書き込み

となることは分かるのですが、上の例だと不一致と一致を同時に指定することはできません。そのような場合はSetEnvIfの判定条件を工夫するのでしょうか?

私の場合の具体的な質問はこうです。
「WMVファイルだけのアクセスログファイルを作りたい」
「かつ、家庭内LANからのアクセスログは排除したい」
と思い、下のように設定したのですが、

#家庭内LANからのログを排除するための環境変数
SetEnvIf Remote_Addr 192.168.0. nolog
#WMVファイルのログを取るための環境変数
SetEnvIf Request_URI \.wmv$ wmv-files

このように設定すると、最初の例のように、不一致と一致のログをうまく作れません。

長くなってしまってまとまりがありませんが、何分素人なのでこれが限界です。。どうか回答のほど宜しくお願いいたします。

A 回答 (2件)

失礼いたしました。


QNo.3601206の一部をコピーして使用しましたので、ご指摘のように先頭にマッチさせるメタ文字になってしまったものと思います。
「^/string/」という記述を行なって、stringの否定を表現したかったものです。

以下の記述ではどうなりますでしょうか?
SetEnvIf Remote_Addr "192.168.0." nolog
SetEnvIf Request_URI "^/wmv/" nolog (または "^/.wmv/")

CustomLogには env=!nolog のようにenvを否定形で指定する。
    • good
    • 0

投稿文章の2)と3)とも環境変数が同一にしてある意味が理解できませんでした。



たとえば次のように設定するとどのようになりますか?。
#排除するアドレス
SetEnvIf Remote_Addr "192.168.0." nolog
#排除するファイルをXORで定義する
SetEnvIf Request_URI "^\.wmv$" nolog

上記のように環境変数を定義しておいてCustomLogには
env=!nolog
のようにenvを否定形で指定する。

この回答への補足

すいません、回答へのお礼を書いたあとに確かめたのですが、
wmvファイル以外のものも記録されるようになってしまいました。
確認したいのですが、^は先頭にマッチさせるメタ文字ではないでしょうか?
というのも、リファラーの制限などでよく
SetEnvIf Referer "^http://www\.foo\.jp"
このようなものを見かけます。この時の^は「以外」ではなく「先頭」ですよね。
以外を示すメタ文字があればそれで解決しそうな気がしますが、
探す能力に乏しいのか見つかりません。
ご存知であればよろしくお願いいたします。

補足日時:2007/12/16 12:14
    • good
    • 0
この回答へのお礼

take_chanさん。早速のご回答ありがとうございます。
> 投稿文章の2)と3)とも環境変数が同一にしてある意味が理解できませんでした。
これは判定の条件式が2)と3)で異なるので、環境変数Bは2)と3に一致(または不一致)させたい時に、環境変数Xは1)と2)と3)に一致(または不一致)させたい時に使えるようにしてあります。

> たとえば次のように設定するとどのようになりますか?。
> #排除するアドレス
> SetEnvIf Remote_Addr "192.168.0." nolog
> #排除するファイルをXORで定義する
> SetEnvIf Request_URI "^\.wmv$" nolog
サンプルを考えてくださってありがとうございます。
これなら確かに
「家庭内LANの接続を記録しない」
「WMV以外のリクエストを記録しない」
ですからWMVだけの記録が取れそうですね。
早速試してみたいと思います。どうもありがとうございました。
確認が取れたら質問を締め切らせていただきます。

お礼日時:2007/12/16 11:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!