it-swarm.com.de

Multisite: Lokale Entwicklung mithilfe von Produktionsimages mit .htaccess

Ich arbeite an einer WordPress-Installation mit mehreren Standorten (siehe - https://codex.wordpress.org/Create_A_Network ). Ich möchte nicht alle Remote-Produktionsimages herunterladen müssen, um die Sites in meiner lokalen Umgebung zu testen.

Das folgende .htaccess-Beispiel zum Umschreiben ermöglicht das direkte Abrufen von Bildern von einer WordPress-Live-Site:

RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://example.com/$1 [QSA,L]

Siehe - https://css-tricks.com/develop-locally-use-images-production/ , dies beschreibt die normale eigenständige WordPress-Installation.

Kann jemand dies anpassen, um für eine Multisite-Installation zu funktionieren, d. H. Eine, die mehrere WordPress-Blogs in verschiedenen Domänen umfasst?

Ich habe Folgendes versucht, um Anforderungen für bestimmte lokale Unterdomänen zuzuordnen, aber keinen Erfolg:

RewriteCond %{HTTP_Host} ^local\.example\.com/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://www.example.com/$1 [QSA,L]
1
benedict_w

Der folgende .htaccess, um das Beispiel umzuschreiben ...

RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ http://example.com/$1 [QSA,L]

Nur zur Beachtung ... dies führt zu einer externen Umleitung (als ob R=302 in der RewriteRule-Direktive enthalten wäre), nicht einfach zu einem "Umschreiben" (wie vorgeschlagen) - auch ohne das R-Flag. Daher gibt der Browser für jede Ressource im Upload-Verzeichnis zwei Anforderungen aus. Während der Entwicklung in einer lokalen Testumgebung mag dies in Ordnung sein (wie Sie es tun), aber Sie würden so etwas in der Produktion niemals tun, da dies Ihre Site buchstäblich zum Erliegen bringen könnte, wenn Sie über viele externe Ressourcen verfügen. (Um dies richtig zu machen, müssten Sie Ihren Server als Reverse-Proxy konfigurieren und mod_proxy verwenden, um die Anforderung zu "vertreten".)

Wenn Sie in der RewriteRule substitution eine absolute URL (dh mit Schema + Hostname) angeben, löst Apache implizit eine externe Umleitung aus.


Um das obige Ziel zu einer bestimmten Domain zu machen (zB local.example.com), müssen Sie nur eine zusätzliche Bedingung hinzufügen, die den Header Host prüft. Zum Beispiel:

RewriteCond %{HTTP_Host} ^local\.example\.com
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^/]+/
RewriteRule (.*) http://example.com/$1 [R,QSA,L]

Einige Anmerkungen zu den oben genannten Punkten:

  • (.*) ist dasselbe wie ^(.*)$ - die Anker sind nicht erforderlich.
  • Ebenso ist .*$ (der einfach mit irgendetwas am Ende der URL übereinstimmt) überflüssig.
  • Es ist nicht erforderlich, Escape-Schrägstriche in der Zeichenklasse zurückzusetzen: [^/] ist dasselbe wie [^\/].
  • Stimmt mit 1 oder mehr Zeichen im Pfadsegment überein, nicht mit 0 oder mehr. dh [^/]+ statt [^/]*.
  • Ich habe die R hinzugefügt, da Sie genauso gut klarstellen können, was wirklich passiert.

Tatsächlich benötigen Sie jedoch nicht die zweite RewriteCond, die mit dem REQUEST_URI übereinstimmt. Es ist effizienter, dies in die RewriteRule pattern zu verschieben, da die RewriteRule pattern zuerst verarbeitet wird. Beispielsweise könnte das Obige wie folgt umgeschrieben werden:

RewriteCond %{HTTP_Host} ^local\.example\.com
RewriteRule ^wp-content/uploads/[^/]+/ http://example.com%{REQUEST_URI} [R,QSA,L]
3
MrWhite