18

これは、おそらく以前に遭遇したことのある Apache の質問です。ワークステーション、ステージング サーバー、および運用サーバーに展開できる 1 つのソース パッケージを用意したいのですが、URL に基づいてさまざまな .htaccess 設定を読み込む必要があります。

IfModule 呼び出しで kludge を使用していたことに注意してください。ただし、ステージング サーバーと同じモジュールをすべて共有するため、新しい運用サーバーでは機能しません。

これらの書き換えに SetEnv をバンドルする必要があることに注意してください。現在、RewriteCond を使用すると、次の RewriteRule のみに関連付けられますが、その下の SetEnv には関連付けられません。

4

4 に答える 4

15

SetEnv を使用する代わりに、RewriteRule 自体の環境変数設定機能を使用します。

RewriteCond %{HTTP_HOST} =foo.com
RewriteRule ^ - [E=VARNAME:foo]

RewriteCond %{HTTP_HOST} =bar.com
RewriteRule ^ - [E=VARNAME:bar]

私は、起動時に httpd プロセスにフラグを渡し、IfDefine ブロックを使用してそれらを探すことによって、この種のことを行うことを好みます。

<IfDefine FOO>
SetEnv VARNAME foo
</IfDefine>

<IfDefine BAR>
SetEnv VARNAME bar
</IfDefine>
于 2009-04-21T18:07:25.803 に答える
6

Ubuntu Linuxでは、IfDefine's 変数は

/etc/apache2/envvars

と呼ばれAPACHE_ARGUMENTSます。そのため、そのファイルの最後に次を追加する必要がありました。

export APACHE_ARGUMENTS="-D dev"

...そして、サーバーをバウンスします:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

他のシステムでは:

ただし、このトピックについて説明している Debian の記事がここにあります。その例では、編集するファイルは /etc/default/apache2 で、変数はAPACHE_DEFINES.

同様に、一部のシステムでは、OPTIONSで設定される名前付きの変数です/etc/sysconfig/httpd

したがって、実際に行う必要があるのは、apache2ctl ファイルの開始セクションを探すことです。そのため、スクリプトの場所を見つけるためにa を実行することから始め、whereis apache2ctlそれを見つけて、apache2 ディレクティブが含まれる開始セクションを見つけ、それが渡す変数がOPTIONSAPACHE_ARGUMENTSAPACHE_DEFINES、または何か他のものであるかどうかを確認します。/etc/sysconfig/httpd次に、 、/etc/default/apache2、またはのいずれかを試して、編集する必要があるファイルを確認します/etc/apache2/envvars

于 2009-11-22T20:08:24.330 に答える
1

これは、要件を満たすように変更するのに十分な簡単な例です。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /

    RewriteCond %{HTTP_HOST} !^localhost
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
于 2009-04-10T02:39:20.093 に答える