Wir haben kürzlich einen unserer Webserver auf Apache 2.4 umgestellt und PHP über php-fpm und mod_proxy_fcgi ausgeführt. Fast alles funktioniert ganz gut, aber es gibt ein Problem, das ich noch nicht verstehe. Auf einer unserer Websites wird WordPress ausgeführt, das eine gute Liste von Umschreiberegeln in der .htaccess-Datei enthält. Und es scheint, dass diese mit der ProxyPass-Direktive im vhost-Setup nicht so gut funktionieren.
Unser vhost enthält folgende Konfiguration:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.2:9126/<path>/$1
Dies funktioniert in den meisten Fällen.
Die htaccess-Datei führt nun unter anderem Folgendes aus:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
Da es sich bei der Site um ein Multiblog in Unterverzeichnissen handelt, habe ich gelesen, dass die URL /blogname/wp-admin/load-styles.php?xxxx als wp-admin / load-styles.php? Xxx (die zweite Umschreiberegel) umgeschrieben werden sollte. Wenn Sie sich jedoch das mod_proxy-Protokoll ansehen, lautet die tatsächlich übergebene Anforderung /blogname/wp-admin/load-styles.php.
Ich habe dies gelesen, da es ein Vorrangproblem gibt - die ProxyPass-Regel wird ausgelöst, bevor alle RewriteRules bearbeitet wurden.
Ich bin geschwächt - was kann die Ursache sein?
quelle
RewriteRule
mit dem[P]
Flag wechseln ?Antworten:
Ich habe diese Lösung gefunden, ich weiß nicht, ob der beste Weg ist, aber sie funktioniert für mich.
Entfernen Sie die Linie:
Fügen Sie dies in Ihre Direktive ein:
Alle echten PHP-Dateien werden zum fcgi-Proxy umgeleitet.
Und die " RewriteOptions InheritBefore " Dies zwingt die aktuelle Konfiguration, die Konfiguration des übergeordneten Elements zu erben, wird jedoch vor den im untergeordneten Bereich angegebenen Regeln angewendet (.htaccess im Verzeichnis). Ist die einzige Möglichkeit, die Kompatibilität zwischen der fcgi-Konfiguration und der .htaccess-Konfiguration des Clients zu finden.
Um andere Parameter zu steuern, die Sie möglicherweise für den Proxy benötigen:
quelle
Mit
ProxyPassMatch
werden.htaccess
Dateien ignoriert. Versuchen Sie es mitFilesMatch
undSetHandler
stattdessen, wie hier und hier beschrieben .quelle
Verschieben Sie die Umschreibungslogik in die ProxyPassMatch-Ausdrücke. Fügen Sie zwei zusätzliche ProxyPassMatch-Zeilen vor der in Ihrer vhost-Konfiguration hinzu:
quelle