Php

Apache 2.4 + PHP-FPM + 動態 ProxyPassMatch

  • February 16, 2019

預期結果:

如果我去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>

引用自:https://serverfault.com/questions/954060