2016-08-26 16 views
1

Apache2.4でのsymfony2アプリケーションのホスティング(fpmはprod、mod_phpはdevel)。サブドメイン(.XXX)でApache/Symfony2:少数のルート以外のものや別のホストへのリダイレクト

私たちは、メインのドメイン(.COM)に以外のURI //sp(.*)すべてをリダイレクトします。

<VirtualHost *:80> 
    ServerName www.lsk.xxx 
    RedirectMatch 301 !^(/$)|(/sp(.*))$ http://www.lsk.com/$1 
    # ! is not possible here. 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.lsk.com 
</VirtualHost> 

は私が私が唯一/spページをリダイレクトすることが可能だろうが、それは考慮に根/をとらない一つの発現が見つかりました:残念ながら、これが可能になるだろうRedirectMatchで一致する式を否定する方法はありません。 (その1は私のお気に入りですが、も考慮に/をとる正規表現の書き方を??):

RedirectMatch 301 ^/((?!sp).*)$ http://www.lsk.com/$1 

次我々はmod_rewriteを行ってきました:

RewriteCond %{REQUEST_URI} ^/$ [OR] 
RewriteCond %{REQUEST_URI} ^/sp 
RewriteRule ^.*$ - [PT,L] 

RewriteRule ^.*$ http://www.lsk.com/$1 [L,R=301] 

ので//spはパススルーを強制すると、それ以外はすべて別のホストにリダイレクトされます。しかし、それは動作しません:最後の行はまだ//spで評価されています!書き換えログを見た後、これはsymfony2フレームワークの書き換えルール(フロントページコントローラ)によって書き換えエンジンがapp[_dev].php(2つのルールと一致しないため転送される)を含む別の書き換えサイクルを開始するように強制します。

フレームワーク固有のリクエストuri(私の次の回答を参照)と一致する条件を追加することで、この問題をすでに「解決済み」していますが、私のインフラストラクチャにアプリケーションの知識が導入されているので、誰もがもっと良い方法を知っていますか?

答えて

0

むしろ「汚い」の修正を考慮にSymfony2の第二の書き換えサイクルを取って、このいずれかになります。

RewriteCond %{REQUEST_URI} ^/$ [OR] 
RewriteCond %{REQUEST_URI} ^/sp [OR] 
RewriteCond %{REQUEST_URI} ^/app # yuck 
RewriteRule ^.*$ - [PT,L] 

RewriteRule ^.*$ http://www.lsk.com/$1 [L,R=301] 
関連する問題