Ожидайте результат:
Если я перейду на http: //foo.local/index.php
, будет выполнен файл /var/www/html/foo/index.php
.
Будет похоже, если я перейдите по адресу http://bar.local/index.php
, /var/www/html/bar/index.php
будет выполнен.
Вот мои конфигурации:
<VirtualHost *:80>
ServerAlias *.localhost
VirtualDocumentRoot /var/www/html/%1/
<IfModule proxy_module>
#ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/$1 (this line works in normal virtualhost)
ProxyRemoteMatch ^([^.]+).*/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/$1/$2
</IfModule>
</VirtualHost>
На данный момент это хорошо работает со статическими файлами, такими как .html. Но он будет печатать файлы .php вместо их выполнения.
Пожалуйста, посоветуйте, спасибо.
PS: Если бы я использовал mod_php вместо php-fpm, было бы проще. Но в целях обучения я действительно хочу пройти трудный путь.
Вот мое собственное решение (используйте RewriteRule с флагом [P] вместо ProxyPass):
<VirtualHost *:80>
ServerAlias *.localhost
VirtualDocumentRoot /var/www/html/%1/
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+) [NC]
RewriteRule ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/%1/$1 [P]
#<IfModule proxy_module>
#ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
#ProxyRemoteMatch ^([^.]+).*/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1/$2
#</IfModule>
</VirtualHost>