预期结果:
如果我转到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,那会更容易。但出于学习目的,我真的想走一条困难的路。
答案1
这是我自己的解决方案(使用带有 [P] 标志的 RewriteRule 而不是 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>