proxy do Apache2 fastcgi reescrita condicional com correspondência de passagem de proxy e cookie

1

Atualmente tenho dois projetos:

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

Ambos têm o mesmo repositório, mas estão configurados para dois ramos diferentes.

Eu tenho vhost para o primeiro site:

<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>

Quando solicito o link , tudo funciona bem. Mas agora quero enviar pessoas para /sf2.local/ quando houver um cookie com o nome THEME set. Algo parecido com isto:

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

Como posso combinar a mod rewrite com o proxy fastcgi para o servidor de um site quando não há cookie e outro quando há um conjunto de cookies?

    
por piotrekkr 27.06.2018 / 23:15

1 resposta

0

Ok, então eu descobri.

O Vhost deve ficar assim:

<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');

Agora, quando eu inserir link pela primeira vez,

    A solicitação
  1. é reescrita para sf.local/web/app_dev.php
  2. ProxyPassMatch processa a solicitação para o diretório de temas antigo fcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf.local/web/app_dev.php
  3. o cookie está definido
  4. OLD THEME é exibido

Após a atualização

    A solicitação
  1. é reescrita para sf2.local/web/app_dev.php
  2. ProxyPassMatch trata da solicitação para o novo diretório de tema fcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf2.local/web/app_dev.php
  3. NEW THEME é exibido

As regravações também funcionam para outros arquivos, como o link . Sem cookie, ele é reescrito para /home/piotrek/Vhosts/sf.local/web/robots.txt e com cookie para /home/piotrek/Vhosts/sf2.local/web/robots.txt

    
por 03.07.2018 / 23:14