Apache2 прокси fastcgi условно переписать с прокси-паролем и cookie
В настоящее время у меня есть два проекта:
- /home/piotrek/Vhosts/sf.local/web/app_dev.php
- /home/piotrek/Vhosts/sf2.local/web/app_dev.php
Оба имеют одинаковое РЕПО, но настроены на две разные ветви.
У меня есть 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?
1 ответ
Итак, я понял это.
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. Без куки переписывается /home/piotrek/Vhosts/sf.local/web/robots.txt
и с cookie для /home/piotrek/Vhosts/sf2.local/web/robots.txt