Ich habe WordPress in einem Unterverzeichnis (blog
) installiert. Im Stammverzeichnis habe ich Magento installiert. Jetzt ist das Dateiverzeichnis wie folgt:
app
downloader
includes
media
....
blog/wp-admin
Mein Server ist nginx . Wenn ich die URL in WordPress einstelle Permalink Settings to:
http://www.example.com/blog/index.php/sample-post/
… Alle Beiträge sind verfügbar. Jetzt möchte ich den index.php
von dieser URL entfernen. Wie soll ich das machen Wenn ich die benutzerdefinierte Struktur auf ... setze
http://www.example.com/blog/sample-post/
… Die URLs werden von WordPress nicht aufgelöst und ich bekomme eine 404.
Das Problem hängt wahrscheinlich mit den Servereinstellungen in Nginx für Ihr Blog zusammen. Es ist wahrscheinlich, dass die Standortregeln für/blog/falsch sind, insbesondere try_files. Es sollte so aussehen:
location /blog/ {
try_files $uri $uri/ /index.php$is_args$args;
}
Dies teilt Nginx mit, in welcher Reihenfolge es versuchen soll, die angeforderte Ressource zu finden. Zunächst wird versucht, das genaue Objekt in der URL zu finden. Ist dies nicht der Fall, wird versucht, das Objekt als Verzeichnis zu finden. Wenn dies nicht der Fall ist, wird die Anfrage zusammen mit Argumenten oder Abfragezeichenfolgen (falls vorhanden) an index.php übergeben. Seit index.php im Haupt-Handler für WordPress wird WordPress dazu veranlasst, die Seite oder den Beitrag zu finden, die bzw. den Sie aufgrund Ihrer Umschreiberegeln angefordert haben.
Das Schöne an dieser Konfiguration ist, dass Sie jetzt Ihre Permalink-Struktur in alles ändern können, was WordPress unterstützt, ohne Ihre Nginx-Regeln ändern zu müssen. Dies ist auch die empfohlene Methode, um explizite Umschreiberegeln in Nginx zu verwenden.
Fügen Sie diesen Code in Ihre functions.php
-Datei ein
add_filter( 'got_rewrite', '__return_true', 999 );
got_mod_rewrite () function prüft mit Apache_mod_loaded () function, ob der aktuelle Server Apache ist oder nicht. Da wir Nginx verwenden, wird false zurückgegeben. Also fügt WordPress index.php in die URL ein.
Indem wir got_rewrite filter verwenden, teilen wir WordPress mit, dass wir auf unserem Server ein Umschreiben erhalten haben.
Fügen Sie dieses Standortobjekt Ihrer Serverkonfiguration in Ihrer nginx.conf hinzu.
location /blog {
try_files $uri $uri/ /blog/index.php$is_args$args;
}
Starten Sie dann nginx neu.
Ich verwende einen symbolischen Link zum WordPress-Ordner in meiner Implementierung und habe festgestellt, dass es immer noch Probleme gibt, wenn ich versuche, auf echte Ordner innerhalb dieses symbolischen Links zuzugreifen. Es gibt drei dieser Ordner, und der Teil try_files $uri/
scheint hier (zumindest für mich) fehlzuschlagen, sodass ich diese Ordner manuell von der Manipulation durch try_files
ausgeschlossen habe. Wenn Sie ähnliche Probleme haben, probieren Sie den Standortblock unten aus.
location ~* \/blog\/(?!.*(wp-admin|wp-content|wp-includes)).* {
try_files $uri $uri/ /blog/index.php$is_args$args;
}