2016-11-03 19 views
0

私は私のプロジェクトのWebルートに次の.htaccessファイルを持っている:Apache2の書き換え - 条件付き

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule . /repos/eamorr.co.uk/react_www/index.html [L,QSA] 

上記の作品を。

私はに移動した場合:

http://localhost/repos/eamorr.co.uk/react_www

私は私のホームページを参照してください。

そして、私はに移動したとき:

http://localhost/repos/eamorr.co.uk/react_www/contact-us

私は私のホームページの「接触-たち」ルートを(私のWebページがリアクトで書かれている)を参照してください。

OK。すばらしいです。今

、一部のユーザーは、Linux上にある:彼らはコードをチェックアウトすると

、彼らはわずかに異なるURLでサイトを参照してください。

http://localhost/_eamorr/develop/eamorr.co.uk/react_www/

http://localhost/_eamorr/develop/eamorr.co.uk/react_www/contact-us

この行は、.htaccessファイル:

RewriteRule . /repos/eamorr.co.uk/react_www/index.html [L,QSA]

代わりの.は、私は別のパスからのindex.htmlを提供するために入れることができ、いくつかの条件がありますか?

RewriteRule {{condition1???}} /repos/eamorr.co.uk/react_www/index.html [L,QSA]

か(異なる条件=別のパス):

RewriteRule {{condition1???}} /_eamorr/develop/eamorr.co.uk/react_www/index.html [L,QSA]

私はApacheの知識がアップ情報を迅速にこれを行うことはできません怖いと私はしましたこれで時間を費やした!

=================

策:次のように

はカスケードhtaccessファイルの書き換えルールの設定を使用します。

RewriteEngine On 
#RewriteBase/


#Linux localhost: 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_URI} ^.*repos/eamorr.co.uk/react_www.*$ 
RewriteRule ^([^/]+\.?[^/])*$ /repos/eamorr.co.uk/react_www/index.html [L,QSA] 


#Mac localhost: 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_URI} ^.*_eamorr/eamorr.co.uk/react_www.*$ 
RewriteRule ^([^/]+\.?[^/])*$ /_eamorr/eamorr.co.uk/react_www/index.html [L,QSA] 


#develop .co.uk 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_URI} ^.*gitWebFlow/eamorr.co.uk/develop/react_www.*$ 
RewriteRule ^([^/]+\.?[^/])*$ /gitWebFlow/eamorr.co.uk/develop/react_www/index.html [L,QSA] 


#master .co.uk 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_URI} ^.*gitWebFlow/eamorr.co.uk/master/react_www.*$ 
RewriteRule ^([^/]+\.?[^/])*$ /gitWebFlow/eamorr.co.uk/master/react_www/index.html [L,QSA] 


#default 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule . /index.html [L,QSA] 

これは今私の必要性のために十分です。

答えて

1

react_wwwがプロジェクトのルートで、そのディレクトリ(公開されているURLを介して)の上にアセットを参照していない場合は、それは.htaccessである必要があります。そして、それはあなたがサーバー側の外部リダイレクトをやっていないので、RewriteBaseを必要とし、ちょうど同じファイルを提供する全てにそのディレクトリ下の仮想URLを望んでいないはずです

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule . index.html [END] 

なります。

+0

こんにちは、これは非常に便利な投稿でした。それに応じて私のオリジナルの質問を更新しました... – Eamorr

+0

これは役に立ちましたがうれしいですが、htaccessをウェブルートのように見せかける目的を打ち消すようなルールはありません。それらのサイトは 'react_www 'より上のディレクトリから何かを提供していますか?そうでない場合は、 'DocumentRoot'の移動やシンボリックリンクの使用を検討して、リポジトリ構造が公開されているフォルダ内にある必要はありません。ポイントはおそらく、あなたが同じ(追跡された)ファイルを使って各ブランチを管理している可能性が高いからです。 – Walf