demolog

備忘録. 雑なあまりにも雑な

Apache設定ファイルでIncludeファイルにパラメータを渡す方法

やりたいこと

個人用開発環境を沢山作りたい時にApache設定ファイルの内容が冗長化してしまうので整理したい。 Includeで共通化をしてみたものの一部の記述が特定の環境に依存してしまったため、パラメータを渡すなりして他の個人用開発環境にも応用したい。

RewriteEngine on
RewriteRule ^/contents.php$ - [L]
RewriteRule ^/hoge/(.*)$ http://1.dev.new.hoge.com/hoge/$1 [L,P]
<VirtualHost *:80>
    DocumentRoot "/home/httpd/dev1/hoge.com/htdocs"
    ServerName 1.dev.hoge.com

    Include conf.d/include/rewrite_rule.conf
    .
    .
    .
</VirtualHost>

対応方法

SetEnvIfディレクティブを使うことで解決した。

SetEnvディレクティブでも環境変数を制御することができるが、Includeの直前に設定してもInclude先の設定ファイル側では環境変数を参照することができなかった。 SetEnvではなくSetEnvIfを使うことで環境変数を参照することができた。

RewriteEngine on
RewriteRule ^/contents.php$ - [L]
RewriteRule ^/hoge/(.*)$ http://%{ENV:ENV_NO}.dev.new.hoge.com/hoge/$1 [L,P]
<VirtualHost *:80>
    DocumentRoot "/home/httpd/dev1/hoge.com/htdocs"
    ServerName 1.dev.hoge.com
    SetEnvIf _ .* ENV_NO=1

    Include conf.d/include/rewrite_rule.conf
    .
    .
    .
</VirtualHost>

参考ページ