Сейчас у меня два проекта:
Оба имеют одинаковое репо, но настроены на две разные ветки.
У меня есть vhost для первого сайта:
<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/ все работает нормально. Но теперь я хочу отправить людей на /sf2.local/, когда есть cookie с именем THEME
устанавливать. Что-то вроде этого:
RewriteCond %{HTTP_COOKIE} THEME=new [NC]
RewriteRule ^(.*)$ sf2project
Как я могу объединить перезапись мода с прокси-сервером fastcgi для сервера одного сайта, когда нет файлов cookie, а другого, когда установлены файлы cookie?
Хорошо, вот я и разобрался.
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/ первый раз,
sf.local/web/app_dev.php
ProxyPassMatch
обрабатывает запрос к каталогу старой темы fcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf.local/web/app_dev.php
OLD THEME
отображаетсяПосле обновления
sf2.local/web/app_dev.php
ProxyPassMatch
обрабатывает запрос к новому каталогу темы fcgi://127.0.0.1:9071/home/piotrek/Vhosts/sf2.local/web/app_dev.php
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