私はこの問題に約 4 時間取り組んだばかりで、最終的な答えを持っていると信じており、この特に苦痛な問題を解決する方法をすべての人に要約することができます.
Windows 7 Home Premium と Apache 2.2x および Php 5.3 を開発マシンとして使用しています。私もDEV環境変数が必要です。これを .htaccess ファイルで使用して、開発環境では有効ではないが本番環境には重要な Rewriting やその他のディレクティブをオフにできます。
私の .htaccess ファイルは次のようになります。
<IfDefine !__DEV__>
AddType application/x-httpd-php53 .php
</IfDefine>
HostGator から、php 5.3 を使用するには、このように htaccess ファイルを変更して有効にする必要があると通知されました。そうしないと、php 5.2 しか使用できません。しかし、私はすでに開発マシンにそれを持っているので、ローカルで表示すると、このディレクティブが原因で顧客の Web サイトがクラッシュしていました。これから説明するすべてのことにより、1 つの .htaccess ファイルを Git リポジトリに保持することができました。これは両方の場所で機能します。
まず、この問題を解決するために IfDefine と SetEnv を使用する方法をインターネットで探しているときに学んだすべてのことを明確/要約させてください。
- Apache の IfDefine ディレクティブ Only 、 ONLY は、コマンド ラインで渡されたパラメーターに応答します。それを少し強調させてください。コマンドラインのみ!
- SetEnv と SetEnvIf は、2 つのまったく異なるものです。1 つ (SetEnv) は conf ファイルで使用するためのもので、SERVER START TIME に設定される環境変数 (apache に固有) を設定します。SetEnfIf は REQUEST TIME に使用され、REQUEST 変数に基づいて何を設定するかを決定するためにのみ使用されます。
- IfDefine ディレクティブは、SetEnv または SetEnvIf によって設定された変数を読み取りません。限目。議論も、質問も、「しかし、私は思った...」もありません。そうではないので、それを乗り越えてください。
簡単な答えは NO です。httpd.conf で「SetEnv DEV 1」を使用してから、IfDefine を使用して .htaccess ファイルでそれを検出することはできません。これは、プログラミング ロジックの構文と性質に基づいて、直感的で合理的に思われます。私たちの慣れています。実際には何もプログラミングしていないことを思い出してください。これらは構成ファイルであり、もちろん、そうすべきだと思われるという理由だけで、この期待に準拠していません。
答え
つまり、起動パラメーターを Apache に追加する方法を理解する必要があるということです。Linux の連中にとっては、その答えはすぐに見つかります。適切なものをenvvarsファイルに追加するだけでよいのですが、貧しいWindowsジャンキーはどうすればよいでしょうか。 ?
Windows ユーザーにとっては、次の理由でより楽しくなります。
- Windows では、Apache2.2 のサービス構成に起動パラメーターを永続的に追加することはできません (機能しません。試してはいけません。何百万回も実行していますが、信じてください)。これは本当です。そこに行って独自のパラメーターを入力しようとすると、一度しか機能せず、次にダイアログを開いたときにパラメーター フィールドが空になります。なぜそうなのかはわかりませんが、これらのパラメーターはテスト用であり、恒久的な変更ではないようです。
- Apache をインストールすると、スタート メニューに「開始」、「停止」、および「再起動」のショートカットが作成され、Apache Services Monitor がインストールされます。ただし、スタート メニューのショートカットは、Apache サービス モニターで使用されるものとは異なる起動パラメータを使用します。したがって、これらの方法の組み合わせを使用して apache を開始/停止すると、使用した方法に応じて異なる結果が得られます。ただし、スタート メニューのショートカットに -D "__DEV__" を入れると機能します。
それを解決する手順
.htaccess ファイルで IfDefine を使用して参照できる __DEV__ 環境変数を永続的かつ普遍的に設定するには、Windows 開発環境で、サービスまたはスタート メニューのショートカットを使用して Apache を起動するか、NET START/STOP を使用して NET START/STOP を使用して起動しても機能します。コマンド ラインで、次の操作を行います。
スタート メニューのショートカットのプロパティを開き、そこで Apache を起動するためのコマンドを抽出します。私はそうでした。"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -w -n "Apache2.2" -k start
これを変更して、新しい -D __DEV__ 変数を含めます。この変数は、httpd.exe の直後の先頭に配置する必要があります。"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -D "__DEV__" -w -n "Apache2.2" -k start
スタート メニューのショートカットは、dev 変数が配置された状態で apache を起動します。
コマンドラインに移動します (管理者として)
タイプ: net stop apache2.2 (または apache のサービス名は何でも)
ここで、上記のスタート メニューのショートカットで使用されているのと同じコマンドをコマンド ラインに入力 (またはコピー アンド ペースト) しますが、次のように変更します。"C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -D "__DEV__" -w -n "Apache2.2" -k config
- startという単語がconfigに変わっていることに注意してください。この魔法のコマンドが行うことは、画面に表示されている設定を、Windows のサービスに保存されている設定に保存することです。Enterキーを押します。この時点から、サービスを開始するか、Apache Services Monitor がサービスを開始するか、Windows がサービスを開始するたびに、変数が渡されます。
小説で申し訳ありませんが、このすべての情報を要約して説明することで、他の疲れた魂が助けてくれることを願っています。:D