web-dev-qa-db-ja.com

プロキシパスの一致とCookieを使用したApache2プロキシfastcgi条件付き書き換え

現在、2つのプロジェクトがあります。

  1. /home/piotrek/Vhosts/sf.local/web/app_dev.php
  2. /home/piotrek/Vhosts/sf2.local/web/app_dev.php

どちらも同じリポジトリを持っていますが、2つの異なるブランチに設定されています。

私は最初のサイトの仮想ホストを持っています:

<VirtualHost *:80>
    ServerName sf.local
    ServerAlias www.sf.local

    DocumentRoot /home/piotrek/Vhosts/sf.local/web

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf.local/web/$1

    DirectoryIndex app_dev.php

    <Directory /home/piotrek/Vhosts/sf.local/web>
        AllowOverride All
        Require all granted
        Options -MultiViews

        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app_dev.php [QSA,L]

        </IfModule>
    </Directory>

    ErrorLog /home/piotrek/Vhosts/logs/sf.local-error.log
    CustomLog /home/piotrek/Vhosts/logs/sf.local-access.log combined

</VirtualHost>

リクエストすると http://sf.local/ すべて正常に動作します。しかし、THEMEという名前のCookieが設定されている場合は、/ sf2.local /にユーザーを送信したいと思います。このようなもの:

RewriteCond %{HTTP_COOKIE} THEME=new [NC]
RewriteRule ^(.*)$ sf2project

Cookieがない場合に1つのサイトをサーバーに、Cookieが設定されている場合に他のサイトにmod rewriteとfastcgiプロキシを組み合わせるにはどうすればよいですか?

1
piotrekkr

わかりました、それで私はそれを理解しました。

Vhostは次のようになります。

<VirtualHost *:80>
    ServerName sf.local
    ServerAlias www.sf.local

    DocumentRoot /home/piotrek/Vhosts

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9071/home/piotrek/Vhosts/$1

    <Directory /home/piotrek/Vhosts>
        AllowOverride None
        Require all granted

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On

            # rewrite if cookie is set to "new"
            RewriteCond %{HTTP_COOKIE} THEME=new [NC]
            RewriteRule ^(.*)$ sf2.local/web/$1 [QSA,L]

            # rewrite to old version
            RewriteRule ^(.*)$ sf.local/web/$1 [QSA,L]
        </IfModule>

    </Directory>

    <Directory /home/piotrek/Vhosts/sf.local/web>

        <IfModule mod_rewrite.c>
            # local rewrite to app_dev.php if file does not exists
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app_dev.php [QSA,L]
        </IfModule>

    </Directory>

    <Directory /home/piotrek/Vhosts/sf2.local/web>

        <IfModule mod_rewrite.c>
            # local rewrite to app_dev.php if file does not exists
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app_dev.php [QSA,L]
        </IfModule>

    </Directory>

    ErrorLog /home/piotrek/Vhosts/logs/sf.local-error.log
    CustomLog /home/piotrek/Vhosts/logs/sf.local-access.log combined

</VirtualHost>

/home/piotrek/Vhosts/sf.local/web/app_dev.php

<?php
setcookie("THEME", "new", time() + 3600);

die('OLD THEME');

/home/piotrek/Vhosts/sf2.local/web/app_dev.php

<?php

die('NEW THEME');

さて、初めて入ると http://sf.local/

  1. リクエストはsf.local/web/app_dev.phpに書き換えられます
  2. ProxyPassMatch古いテーマディレクトリへのリクエストを処理しますfcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf.local/web/app_dev.php
  3. クッキーが設定されています
  4. OLD THEMEが表示されます

リフレッシュ後

  1. リクエストはsf2.local/web/app_dev.phpに書き換えられます
  2. ProxyPassMatchは新しいテーマディレクトリへのリクエストを処理しますfcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf2.local/web/app_dev.php
  3. NEW THEMEが表示されます

書き換えは、 http://sf.local/robots.txt のような他のファイルでも機能します。 Cookieがない場合は、/home/piotrek/Vhosts/sf.local/web/robots.txtに書き換えられ、Cookieがある場合は/home/piotrek/Vhosts/sf2.local/web/robots.txtに書き換えられます。

0
piotrekkr