2012-03-07 5 views
2

現在、私のWebサイトに2つの.htaccessファイルを使用しています.1つは開発バージョンで、もう1つは製品バージョンです。違いは、RedirectMatch,RewriteRule、およびErrorDocumentディレクティブに使用され、開発と生産の間で異なる絶対パスと相対パスです。私はgitフックを使用してdevバージョンを削除し、プロダクションバージョンの名前を変更しますが、これは基本的に同じファイルの2つのバージョンを維持する必要があることを意味します。また、私が管理している他のサイトと同様の問題に遭遇しているので、これはもっと多くの作業を意味します。私はむしろ単一のファイルと、.htaccessファイルに何らかの種類の条件を持っていて、if production -> use these, else -> use theseと言うことができます。 .htaccessファイルでそのようなことをすることはできますか?生産と開発を区別する単一のhtaccessファイル

私はこれを発見した:

.htaccess between developemt, staging, and production

しかし、これは、書き換えルールのためであり、異なるのErrorDocumentパスを修正しないでしょう。他に、>これらを使用する - -

答えて

3

を与えることは困難です以上、あなたはこのように<if expr>ディレクティブを使用することができます:あなたは<if>を使用する場合はApacheの

<if "%{HTTP_HOST} == 'dev.example.com'"> 
    # dev directives 
</if> 
<if "%{HTTP_HOST} == 'www.example.com'"> 
    # prod directives 
</if> 

以前のバージョンでは、これをしようとする前に、Apacheのバージョンを確認してください、500サーバーエラーがスローされます。

1

私はむしろ1つのファイルと生産があれば、私が言うことを可能にする.htaccessファイル内の条件のいくつかの並べ替えを持っている>これらを使用しています。 .htaccessファイルでそのようなことをすることはできますか?

いいえ。

あなたの.htaccessは、少しでも気を付けて作業してください。そして私は私のテストとシステムのためにこれをしました。

IMO、これを行う最も簡単な方法は、開発サイトをいくつかの重要な側面で本番サイトに反映させることです。これが私の行うことです。たとえば、prodドメインがmydomain.comで、テスト環境がlocalhostの場合、etc/hostsファイルにlocalhostのmydomain.homeのエイリアスを追加します。これで、mydomain.homeの仮想ホストを追加し、prodのドキュメントルートと環境設定をミラー化することができます。 HTTP_HOSTを参照する必要がある場合は、mydomain(com | home)を使用して%1を使用してどちらを区別できるようになりました。

ここでは、dev envをLAMPシステムで実行していることを前提としています。そうでない場合は、これを行うVMを設定するのはかなり簡単です(here

RedirectMatchディレクティブの代わりにRewriteRulesを使用し、[C]、[OR]、[E]、および[ [S]は、if/then/else構造を効果的に反映できるブランチスタイルのラダーロジックを実装するためのフラグです。あなた生産は現地のErrorDocumentパス共有ホスティング環境にや衝撃である場合

主な落とし穴がDocumentRootの設定ですが、あなたの環境を知らなくても、それはあなたのサーバーは、Apache 2.3を実行している場合は、より具体的

+0

グレート.hpasswdファイルを必要とすることに注意してください! – user

+0

@ user1162541、はいA2.4はディレクティブを持っていますが、性能や安定性の問題があるため、A2.4を採用しているホスティングサービスプロバイダはほとんどありません。 – TerryE

3

私はApache 2を実行していたので、似たような解決策が必要でしたが、<if expr>指示文を使用できませんでした。2

別の方法は、以下のようにタグ内のapache config(私の場合はvhost-conf)ファイルにパスワード保護命令を入れてください:それでも、アイデアと明確化のための感謝を

ServerAdmin [email protected] 
DocumentRoot "/doc/root/html" 

ServerName dev.lami.me 
ServerAlias dev.lami.me localhost 

ErrorLog "/doc/root/logs/error_log" 
CustomLog "/doc/root/logs/access_log" common 

<Directory "/doc/root/html"> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride All 
    Order allow,deny 
    Allow from all 

    AuthName "Restricted Area" 
    AuthType Basic 
    AuthUserFile /doc/root/.htpasswd 
    AuthGroupFile /dev/null 
    require valid-user 
</Directory> 
関連する問題