AddoutputFilterByTypeでSedとDEFLATEを同時に適用させる
Apacheのフィルタ設定でDEFLATEとmod_sedのフィルタを同一コンテンツに適用させたい。
Apacheのドキュメントによると、複数のフィルタを適用させる場合には";"で列挙すればいいとのこと。
次の例は text/html のスクリプトのすべての出力を まず INCLUDES フィルタで処理し、さらに DEFLATE フィルタにかけます。
<Location /cgi-bin/> Options Includes AddOutputFilterByType INCLUDES;DEFLATE text/html </Location>
そこでこんなふうに書いてみたんですが、これが全然効かない。DEFLATEもSedも効かない。
<Location /> AddOutputFilterByType Sed;DEFLATE text/html OutputSed "s/aaaa/bbbb/g" </Location>
試行錯誤しているうちに、";"の前後に空白が必要なことを発見。こう書くとSedのフィルタは有効になりましたが、DEFLATEが効きません。
<Location /> AddOutputFilterByType Sed ; DEFLATE text/html OutputSed "s/aaaa/bbbb/g" </Location>
さらにいろいろ試していると、どうもLocationのスコープ中でDEFLATEを使う場合にはちゃんとフィルタ名を設定しないといけないらしい。
これが最終型。
<Location /> SetOutputFilter DEFLATE OutputSed "s/aaaa/bbbb/g" AddOutputFilterByType Sed ; DEFLATE text/html </Location>