Apache 2.4:ProxyPassMatch 阻止 mod_rewrite?

Apache 2.4:ProxyPassMatch 阻止 mod_rewrite?

我嘗試在 docker 中設定一個新的開發環境,其中:

  • Bitnami Apache 2.4 - bitnami/apache:2.4
  • Bitnami PHP 8.0 - bitnami/php-fpm:8.0
  • Bitnami Mysql 5.7 - bitnami/mysql:5.7

整個事情都啟動並運行良好,除了:

在我的 vhost.conf 中,我使用 ProxyPassMatch 將 php 檔案重定向到 php-fcgi:

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/app/$1

我的問題是,我需要將子資料夾“dbeS”中的 *.php 檔案重寫為“index.php?id=filename”。 .htaccess 中的 RewriteRule 如下圖所示:

  RewriteRule ^dbeS/(.*)\.php$ dbeS/index.php?id=$1 [QSA,L]

但這根本行不通。當我在瀏覽器中開啟 http://localhost/dbeS/mytest.php 時,我應該被重定向到 http://localhost/dbeS/index.php?id=mytest。但他打開了 http://localhost/dbeS/mytest.php (這是一個空檔)。

我在某處讀到問題是,ProxyPassMatch 在 .htaccess 之前執行,因此 .htaccess 被完全忽略。所以我應該用 filematch 啟動 php fcgi:

<FilesMatch \.php$>
  SetHandler "proxy:fcgi://php:9000/app/"
</FilesMatch>

但這也行不通。結果是「找不到文件。」。這個問題有簡單的解決方案嗎?我希望這裡有人知道如何解決這個問題。
再見,約爾格

我剛剛解決了這個問題:

我必須將 FilesMatch 改為: <FilesMatch .php$> SetHandler "proxy:fcgi://php:9000"

然後我必須將其放入虛擬主機中。另外,我的虛擬主機中的連接埠號碼錯誤:我將 <VirtualHost *:80> 更改為 <VirtualHost *:8080> 並將 <VirtualHost *:443> 更改為 <VirtualHost *:8443>。現在它似乎按預期工作。

答案1

我剛剛解決了這個問題:

我必須將 FilesMatch 改為: <FilesMatch .php$> SetHandler "proxy:fcgi://php:9000"

然後我必須將其放入虛擬主機中。另外,我的虛擬主機中的連接埠號碼錯誤:我將 <VirtualHost *:80> 更改為 <VirtualHost *:8080> 並將 <VirtualHost *:443> 更改為 <VirtualHost *:8443>。現在它似乎按預期工作。

相關內容