webentwicklung-frage-antwort-db.com.de

Wie entferne ich die index.php in der URL?

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.

3
stack2013110

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.

3
Christiaan

Fügen Sie diesen Code in Ihre functions.php-Datei ein

   add_filter( 'got_rewrite', '__return_true', 999 );

Aktualisieren:

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.

1
Giri

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.

Symbolische Verknüpfung zum Wordpress-Ordner

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;
}
1
Chris H.