Übertrumpft Apaches ProxyPassMatch die Umschreiberegeln?

Übertrumpft Apaches ProxyPassMatch die Umschreiberegeln?

Ich habe Folgendes in einem Virtualhost-Abschnitt:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/local.mysite/wordpress/$1

Bei meinen Tests habe ich festgestellt, dass das Hinzufügen einer Umschreiberegel RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]für eine URL wie die folgende keine Wirkung hatte:

http://local.mysite/wordpress/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=....

Liegt das daran, dass alle Anfragen, die .phpden Namen enthalten, an fcgi weitergegeben werden und somit alle Umschreiberegeln ignoriert werden?

Antwort1

Wenn Sie Proxypassmatch oder Proxypass verwenden, wird das PHP-Skript an den PHP-FPM-Prozess weitergeleitet, und der PHP-FPM-Prozess ignoriert die .htaccess-Regeln. Eine Möglichkeit, dies zu vermeiden, besteht darin, Apache Sethandler zu verwenden, wie in dieser Antwort erläutert.https://serverfault.com/a/672969/189511,

 <FilesMatch \.php$>
   SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/"
 </FilesMatch>

Ich kopiere die vollständige Lösung hier

Nach stundenlanger Suche und dem Lesen der Apache-Dokumentation bin ich auf eine Lösung gestoßen, die die Verwendung des Pools ermöglicht und außerdem dafür sorgt, dass die Rewrite-Direktive in .htaccess auch dann funktioniert, wenn die URL .php-Dateien enthält.

<VirtualHost ...>

 ...

 # This is to forward all PHP to php-fpm.
 <FilesMatch \.php$>
   SetHandler "proxy:unix:/path/to/socket.sock|fcgi://unique-domain-name-string/"
 </FilesMatch>

 # Set some proxy properties (the string "unique-domain-name-string" should match
 # the one set in the FilesMatch directive.
 <Proxy fcgi://unique-domain-name-string>
   ProxySet connectiontimeout=5 timeout=240
 </Proxy>

 # If the php file doesn't exist, disable the proxy handler.
 # This will allow .htaccess rewrite rules to work and 
 # the client will see the default 404 page of Apache
 RewriteCond %{REQUEST_FILENAME} \.php$
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
 RewriteRule (.*) - [H=text/html]

</VirtualHost>

Gemäß der Apache-Dokumentation erfordert der Proxy-Parameter SetHandler Apache HTTP Server 2.4.10.

Ich hoffe, dass diese Lösung auch Ihnen weiterhilft.

verwandte Informationen