浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Apache】【Laravel】.htaccessで環境変数を書き換えてデバッグ機能をアクセス内容によって解放する

 Apache は web サーバの一つで PHP プログラムとつなげることで PHP を使った web サービスを動かせます。
Welcome to The Apache Software Foundation!
 .htaccess はディレクトリ単位で Apache 設定を変更する方法を提供します。Apache と Laravel を使った基本動作は Apache 本体の設定で Laravel の公開ディレクトリ(デフォルトでは/public)をドキュメントルートとしてリクエストを飛ばし、公開ディレクトリ内の .htaccess で Laravel プロジェクト内の細かい処理をする、というものです。
Apache チュートリアル: .htaccess ファイル – Apache HTTP サーバ バージョン 2.4
 この公開ディレクトリ内の .htaccess を使って、あるアクセスの仕方では開発環境用動作、別のアクセスの仕方では本番環境用動作、と振り分けをすることができます。

 Laravel 外部における開発環境、本番環境の設定権で最も優先されるのは環境変数です(ソースコード内部でべた書きされたり、キャッシュ済みでしたら外部でどうこうしようと操作できません)。Laravel ではよく .env というファイルで実行環境の設定を行いますが、この .env とは環境変数の代理です。Laravel、PHP以外の他言語でも基本的(あくまで慣例であって実装依存)にそういう立ち位置です。Laravel 内部で使用されている .env を読み込むライブラリである vlucas/phpdotenv も $_ENV 等の言語レベルの環境変数に値が見当たらなければ .env 読み取りに行くつくりになっています。
vlucas/phpdotenv: Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.
 このため .htaccess 上で実行時の環境変数を制御することでアクセス内容によって Laravel の本番環境、開発環境の切り替えができます。これは例えば次の様に行えます。

# 公開ディレクトリ直下に置く .htaccess に以下を追記

# .env 内で 
#APP_ENV=production
#APP_DEBUG=false
# と定義している想定で
<IfModule mod_setenvif.c>
    SetEnvIf Remote_Addr 192.168.99.1 APP_ENV=local
    SetEnvIf Remote_Addr 192.168.99.1 APP_DEBUG=true
</IfModule>

mod_setenvif – Apache HTTP サーバ バージョン 2.4
 mod_setenvif モジュールによって条件付きで環境変数をセットできます。上述の例では SetEnvIf ディレクティブを使ってサーバにアクセスしてきたクライアントの IP アドレスによって環境変数を書き換えています。例ではローカルですが、実際には信用できるネットワークなどにすることが多いと思います。ifで使える条件は詳しくは上記ドキュメントですが、サーバ側の状況も含めて他にも色々な条件を付けられます。
 こんな風に.htaccsessで環境変数を制御すると外部公開している様な常に本番環境モードで動くべきプログラムもデバッグしやすくなります。

  • この記事いいね! (0)