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>

しかし、これもうまくいきません。結果は「ファイルが見つかりません」です。この問題の簡単な解決策はありますか? 誰かこの問題を解決するアイデアを持っているといいのですが。
さようなら、Jörg

私は問題を解決しました:

FilesMatch を次のように変更する必要がありました: <FilesMatch .php$> SetHandler "proxy:fcgi://php:9000"

次に、それを Virtualhosts 内に配置する必要がありました。さらに、Virtualhost のポート番号が間違っていました。<VirtualHost *:80> を <VirtualHost *:8080> に、<VirtualHost *:443> を <VirtualHost *:8443> に変更しました。これで、期待どおりに動作するようになりました。

答え1

私は問題を解決しました:

FilesMatch を次のように変更する必要がありました: <FilesMatch .php$> SetHandler "proxy:fcgi://php:9000"

次に、それを Virtualhosts 内に配置する必要がありました。さらに、Virtualhost のポート番号が間違っていました。<VirtualHost *:80> を <VirtualHost *:8080> に、<VirtualHost *:443> を <VirtualHost *:8443> に変更しました。これで、期待どおりに動作するようになりました。

関連情報