Php
Apache 2.4 + PHP-FPM + 動態 ProxyPassMatch
預期結果:
如果我去
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>