WordPress Skeleton, VVV, Multisite und die richtigen Nginx-Regeln

Lesezeit: 4 Minuten

Ich baue eine automatisierte WordPress-Bereitstellung mit Composer auf und behalte den wp-content-Ordner außerhalb der WP-Hauptinstallation (weil ich einige benutzerdefinierte Plugins und Designs habe), die von github abgerufen werden.

Nach dem Abrufen von github und dem Ausführen von Composer sieht meine Ordnerstruktur folgendermaßen aus:

-composer.php
-env.php
-public/
 |-index.php
 |-wp-config.php
 |-wp-content/
   |-themes/
   |-plugins/
   |-sunrise.php
 |-wp/
   |wordpress stuff

Meine htaccess-Regeln funktionieren bei Verwendung von MAMP gut, aber ich verwende VVV als meine Entwicklungsumgebung und VVV verwendet nginx, sodass meine Rewrite-Regeln nicht funktionieren.

VVV verwendet 2 conf-Dateien: eine Datei, die von allen Sites auf der VM gemeinsam genutzt wird (gemeinsame Regeln) und eine Datei für jede Site (listet im Grunde nur das Stammverzeichnis auf).

Hier ist meine seitenspezifische conf-Datei:

server {
    listen       80;

    listen       443 ssl;

    server_name  auto.dev ~^auto\.\d+\.\d+\.\d+\.\d+\.xip\.io$;
    root         /srv/www/auto/htdocs/wordpress;

    # my rules    
    # tells nginx to prepend "wp" to things
    rewrite ^/(wp-.*.php)$ /wp/$1 last;
    rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;
    # end WP dir rules 

    include /etc/nginx/nginx-wp-common.conf;

}

also habe ich hinzugefügt

rewrite ^/(wp-.*.php)$ /wp/$1 last;
rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;

Und das funktioniert (ich kann den Admin-Bereich abrufen, und der Admin-Bereich hat all sein CSS und JS), aber ich stehe vor 3 großen Problemen:

1) Das Frontend der Seite hat kein CSS mehr. Die Chrome-Konsole zeigt einen Fehler in der zweiten Zeile meiner index.php:

Uncaught SyntaxError: Unexpected token <

Hinweis – Es sieht so aus, als ob einige der Themen funktionieren, eine Site mit dem Thema Twenty Fifteen sieht so aus, als ob sie funktioniert.

2) Ich kann den Multisite-Netzwerkbereich aus irgendeinem Grund nicht erreichen, wann immer ich versuche, dorthin zu gelangen http://auto.dev/wp-admin/network/ Meine Anfrage wird umgeschrieben als: http://http//auto.dev/wp-admin/network/und damit offensichtlich nicht funktioniert

3) Schließlich kann ich mich nicht bei meinen Unterseiten anmelden. Zeug wie http://auto.dev/wiki/wp-admin/ gibt mir eine Umleitungsschleife

4) Mir ist gerade aufgefallen, dass die Vorschau des Designs defekt ist, wenn ich versuche, das Design für eine Website zu ändern.

  • Versuchen Sie, Multisite zu deaktivieren und es zum Laufen zu bringen, und aktivieren Sie es dann erneut.

    – Josua

    7. Januar 2016 um 5:05 Uhr

  • Ich bin kein Nginx-Typ, also bin ich keine große Hilfe, aber vielleicht möchten Sie es überprüfen root.io/trellis das nächste mal machst du sowas. Es führt ein ansibles Playbook aus, um eine hochoptimierte Vagrant-Instanz ähnlich wie VVV auszuführen/bereitzustellen, wodurch vieles vermieden wird, was Sie durchmachen.

    – serraosays

    7. Januar 2016 um 6:09 Uhr

  • Ich weiß, das ist umstritten, aber ich glaube, Sie gehen mit VVV den falschen Weg. Wenn Sie eine Umgebung benötigen, zB für die Entwicklung, warum verwenden Sie dann nicht einfach einen vollwertigen Klon Ihrer Produktion in jeder Hinsicht? Ich verwende eine .net-Domäne, die ein vollständiger Klon ist, oder ich verwende eine AWS-Instanz für Einwegartikel, wie z. Dies beantwortet Ihre Frage nicht, aber ich habe Monate gebraucht, um zu lernen, wie man eine GUI in der Cloud für WP erstellt [Codeception, Selenium, Con. Int., Git ect.], aber das war es wert. Vergessen Sie VVV und klonen Sie vollständig + Ihre Entwicklungstools.

    – Jim Maguire

    7. Januar 2016 um 15:59 Uhr


  • Die Umleitungsschleife hängt wahrscheinlich mit den WordPress-Datenbankeinträgen im Vergleich zu dem in der Datei config.php zusammen und nicht unbedingt mit den Nginx-Regeln.

    – Shawn

    8. Januar 2016 um 0:50 Uhr

Benutzer-Avatar
Birgire

Nur ein paar Anmerkungen:

Dein wp-content/ Ordner ist nicht unter dem wp/ Ordner, wie Sie hier angegeben haben:

rewrite ^/(wp-(content|admin|includes).*) /wp/$1 last;

Da Standardthemen wie Fünfundzwanzig kommen mit dem geliefert /wp/wp-content/ Ordner, könnte dies erklären, warum Sie es dort zum Laufen bringen.

Apropos Vermisste /wp/ Teil der Netzwerk-Admin-URLs, Daniel Bachhuber hat dies praktisch gepostet wesentlicher Ausschnitt das behebt dieses Problem. Es verwendet die network_site_url filtern, um es zu injizieren.

<?php
/**
 * Fix network admin URL to include the "/wp/" base
 * 
 * @see https://core.trac.wordpress.org/ticket/23221
 */
add_filter( 'network_site_url', function( $url, $path, $scheme ){
    $urls_to_fix = array(
        '/wp-admin/network/',
        '/wp-login.php',
        '/wp-activate.php',
        '/wp-signup.php',
        );
    foreach( $urls_to_fix as $maybe_fix_url ) {
        $fixed_wp_url="/wp" . $maybe_fix_url;
        if ( false !== stripos( $url, $maybe_fix_url )
            && false === stripos( $url, $fixed_wp_url ) ) {
            $url = str_replace( $maybe_fix_url, $fixed_wp_url, $url );
        }
    }
    return $url;
}, 10, 3 );

Siehe auch offenes Ticket #23221 an Multisite im Unterverzeichnis mit Root-Site-Adresse

Etwas Diskussionen hier auf GitHub bezüglich nginx + multisite mit wp-skeleton-Struktur (ich habe dort vor einiger Zeit einige Experimente gepostet).

Betrachten Sie eine Lösung nur mit aktualisierter NGINX-Konfiguration, die ich veröffentlicht habe github. Ändern Sie Ihre Umschreibungen wie folgt

if (!-e $request_filename) {
   rewrite ^/(wp-admin/.*)$ /wp/$1 last;
   rewrite ^/[_0-9a-zA-Z-]+(/wp-admin/.*)$ /wp/$1 last;

   rewrite /wp-admin$ $scheme://$host$uri/ permanent;

   rewrite ^/[_0-9a-zA-Z-]+(/wp-includes/.*) /wp/$1 last;
   rewrite ^/(wp-[^/]+\.php)$ /wp/$1 last;
   rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
   rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
rewrite ^/(wp-includes/.*)$ /wp/$1 last;

Das löst alle Probleme mit dem Zugriff auf Admin-Panels und das Netzwerk-Admin-Panel mit Unterordnerinstallation der WordPress-Multisite. Kein Schreiben von Code erforderlich.

1257750cookie-checkWordPress Skeleton, VVV, Multisite und die richtigen Nginx-Regeln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy