Posted at

ApacheのSetEnvの落とし穴

More than 3 years have passed since last update.

以下は期待通りに動かない。

SetEnv hogehoge

Order allow,deny
Allow from env=hogehoge

何故ならSetEnvでセットしたhogehogeが直後のAllowディレクティブで参照できないから。

しかし、以下は期待通りに動く。

SetEnvIf Request_URI ".*" hogehoge

Order allow,deny
Allow from env=hogehoge

SetEnvとSetEnvIfではセットした変数へアクセスできる場所に違いが有る。

前者では直後のAllowディレクティブから参照できないが後者ならできる。

バグか仕様かわからないが気持ちが悪い。

環境変数をセットした場所と、その環境変数へアクセスできる場所との関係は以下のサイトが参考になる。

https://turboflash.wordpress.com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/