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 .php
den 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.