Wie wird nur umgeleitet, wenn die Seite nicht existiert?

Ich habe vor kurzem die Struktur meiner Website dramatisch verändert und ich bekomme Fehler von Seiten, die in der Vergangenheit existierten (und sie werden wahrscheinlich auch in der Zukunft existieren).

z.B:

in der Vergangenheit hatte ich 44 Seiten ( example.com/manual-cat/how-to/page/44/ ) und im Moment habe ich nur Beiträge, um 39 pages zu haben, aber ich werde wahrscheinlich in Zukunft mehr Seiten haben.

Wie kann ich NUR vorübergehend redirect, wenn die Seite nicht existiert?

Der Grund, warum ich dies automatisch tun muss, ist, dass ich 100 und mehr Kategorien mit Fehlern habe und es unmöglich wäre, dies manuell zu tun, indem ich individuelle Redirects mache.

Wenn dies auf der Serverseite gemacht werden muss, bitte beachten Sie, dass ich auf Nginx bin.

Solutions Collecting From Web of "Wie wird nur umgeleitet, wenn die Seite nicht existiert?"

Sie können nicht existierende Seiten nur mit WordPress erkennen. Normale URLs verweisen nicht auf eine physische Ressource, ihr Pfad wird stattdessen intern dem databaseinhalt zugeordnet.

Das bedeutet, dass Sie einen WP-Hook benötigen, der nur ausgetriggers wird, wenn für eine URL kein Inhalt gefunden wurde. Dieser Hook ist 404_template . Dies wird aufgerufen, wenn WP versucht, die 404-Vorlage von Ihrem Design (oder die index.php wenn keine 404.php ) aufzunehmen.

Sie können es für Weiterleitungen verwenden, da zu diesem Zeitpunkt keine Ausgabe gesendet wurde.

Erstellen Sie ein benutzerdefiniertes Plugin und fügen Sie darin Ihre Umleitungsregeln hinzu.

Hier ist ein Beispiel:

 < ?php # -*- coding: utf-8 -*- /** * Plugin Name: Custom Redirects */ add_filter( '404_template', function( $template ) { $request = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING ); if ( ! $request ) { return $template; } $static = [ '/old/path/1/' => 'new/path/1/', '/old/path/2/' => 'new/path/2/', '/old/path/3/' => 'new/path/3/', ]; if ( isset ( $static[ $request ] ) ) { wp_redirect( $static[ $request ], 301 ); exit; } $regex = [ '/pattern/1/(\d+)/' => '/target/1/$1/', '/pattern/2/([az]+)/' => '/target/2/$1/', ]; foreach( $regex as $pattern => $replacement ) { if ( ! preg_match( $pattern, $request ) ) { continue; } $url = preg_replace( $pattern, $replacement, $request ); wp_redirect( $url, 301 ); exit; } // not our business, let WP do the rest. return $template; }, -4000 ); // hook in quite early 

Sie sind natürlich nicht auf eine einfache Karte beschränkt. Ich habe Versionen dieses Plugins mit einigen sehr komplexen für einige Clients, und Sie könnten sogar eine Benutzeroberfläche erstellen, um diese Karte im Admin-Backend zu erstellen … aber in den meisten Fällen wird dieser einfache Ansatz tun, was Sie wollen.

Versuchen Sie in Ihrem .htaccess:

  RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.+) - [PT,L] RewriteRule ^match/this/(.*)$ somewhere/else/$1 [L]  

Wenn es also nicht auf eine Datei oder ein Verzeichnis trifft, wird die Regel zum Umschreiben am unteren Rand angezeigt.

Für nginx:

 # nginx configuration location / { if (-e $request_filename){ rewrite ^/match/this/(.*)$ /somewhere/else/$1 break; } } 

Sie können die .htaccess-Datei verwenden und bearbeiten

 # Redirect old file path to new file path Redirect /manual-cat/how-to/page/44/ http://example.com/newdirectory/newfile.html