3

.htaccess のこの部分が動作しIfDefineません。決して実行されません。私が間違っているのは、setenvifmodが有効になっていることです。

RewriteBase /

SetEnvIf HTTP_HOST ^localhost$ local
<IfDefine local>
  RewriteBase /codeigniter-app/
</IfDefine>

SetEnvIf HTTP_HOST ^testing.alex.com$ testing
<IfDefine testing>
    RewriteBase /app/
</IfDefine>

これは以下に基づいています: mod_rewrite を使用すると、RewriteCond 内で RewriteBase を指定できますか?

編集: 上記を達成する他の方法はありますか?

4

4 に答える 4

12

SetEnvIf はリクエスト ヘッダーで機能します。したがって、HTTP_HOST ではなく HOST を使用する必要があります。例えば

SetEnvIf HOST ^localhost$ local
于 2012-02-29T22:50:47.937 に答える
5

SetEnvIf環境変数を設定します。Apacheが使用する新しい定数を定義していません。

マニュアルを参照して、SetEnvIfマニュアルと比較してください。<IfDefine>

于 2012-02-09T14:08:44.437 に答える
3

そのApacheがここでやろうとしていることを許可しない場合の私の答えですが、それは、本当に必要なことを行うためにこれを行う必要がないためです。

構成面で (リモート) サーバーベースのテスト環境を反映するローカル環境を作成しようとしているかのようです。ただし、URI 名前空間とファイル システムの名前空間を混同しており、Apache サーバーではこれらはまったく異なります。たとえば、<Location>ディレクティブは前者で<Directory>動作し、ディレクティブは後者で動作します。 .htaccess両方を横断するようなものなので、パラメーターがどちらか一方に作用するタイミングを理解する必要があります。

たとえば、いくつかのサブドメインにサービスを提供する共有サービス アカウントがあります。*.ellisons.org.ukたとえば、私のブログはhttp://blog.ellisons.org.uk/にあります。Ubuntu ラップトップと、サービス プロバイダーが運用する LAMP/suPHP 構成をミラーリングする VM で開発しています (ただし、ルート アクセス権があり、VM の書き換えログなどを確認できます)。192.168.1.0/24プライベート アドレス空間に IP アドレスを静的に割り当てます。と/etc/hosts同義語があります

127.0.1.1      ... blog.ellisons.org.home forum.ellisons.org.home ...
192.168.1.250  ... blog.ellisons.org.vm ...

ただし、これ以外の URI スペースは同一であるため、blog.ellisons.org.XX/themes/terry/all.cssXX=uk、home、vm のいずれかに応じて、サーバー、ラップトップ、または VM から CSS をロードします。

ただし、私のラップトップの docroot は Debian standard/var/wwwですが、他の 2 つではそうです/websites/LinuxPackage02/el/li/so/ellisons.org.uk/public_html(私のホスティング会社の命名規則)。それでも、ファイルを含む私のアプリケーション.htaccessは同一であり、これらがこの複数の使用を反映する唯一の方法は、 %{HTTP_HOST} と一致する正規表現として使用する正規表現(\w+)\.ellisons.\org\.(?:uk|home|vm)です。

だからあなたの例に:

  • 要求をローカル PC/appの物理ディレクトリに向けることを止めるものは何もありません。これを行うには、サーバーまたは vhost 構成でディレクティブを/codeigniter-app使用できます。Alias
  • RewriteBaseは URI パス引数を取るので/app、両方で機能します。
  • RewriteCond一般に、Apache は URI ドメインと FS ドメインの違いを理解しており、混乱することはありません。開発者でさえ、よく混乱します:-) %{DOCUMENT_ROOT}-- ただし、サービスが共有サービスの場合は、代わりに環境変数を使用する必要がある場合があります (私の場合は%{ENV:DOCUMENT_ROOT_REAL})。I phpinfo() がどちらかを教えてくれます。
  • 置換には必ず相対アドレスを使用してくださいRewriteRule(先頭のスラッシュは使用しないでください)。

要約すると、少し考えれば、Apache が提供するものと論理的に同一の構成を作成できます。それは、製品に設計されていない方法で条件付き実行を台無しにしようとするよりはましではないでしょうか?

于 2012-02-09T17:56:54.817 に答える