web-dev-qa-db-de.com

Erstellen von 301-Weiterleitungen für Post-, Seiten-, Kategorie- und Bild-URLs?

Ich befürchte, dies könnte zu viel sein, um hier gefragt zu werden. Wenn ja, können Sie mir gerne einen anderen Ort zum Lernen nennen.

Hilfe bei Weiterleitungen

Ich räume eine schlecht entwickelte Site auf und migriere WordPress aus einem Unterverzeichnis. Ich habe stundenlang versucht, mich mit der Logistik von Umleitungen und Regex zu beschäftigen. Ich glaube, ich habe es in den Griff bekommen, würde mich aber über eine Bestätigung, dass ich das richtig mache, und über Ratschläge zu Best Practices sehr freuen. Wenn jemand gute Tutorials mit Anleitungen kennt, würde ich das auch begrüßen.

Wenn jemand wirklich einfache Plugins dafür kennt, wäre ich sehr dankbar. Ich habe mir das Redirections-Plugin angesehen, finde es aber sehr verwirrend (Kopfschmerzen!). Auf jeden Fall sind meine Ideen unten (Quellen gefolgt von => dann Ziel) das, was ich aus den Anweisungen für Weiterleitungen, Screenshots und anderen Tutorials, die ich durchsucht habe, zusammengetragen habe. Ich bin mir ziemlich sicher, dass sie anwendbar wären, unabhängig davon, ob ich sie direkt in die .htaccess-Datei gestellt oder Weiterleitungen oder ein anderes Plugin verwendet habe.

Also, hier ist, was ich versuche zu erreichen und wie ich denke, dass es getan werden muss:

  1. So verschieben Sie Wordpress aus dem Unterverzeichnis in das Stammverzeichnis:

    /wp /(.*) => /$1
    
  2. Für alle Seiten, die sich derzeit in Unterverzeichnissen im Stammverzeichnis befinden, möchte ich mehrere Seiten löschen und/oder zu einer Seite der obersten Ebene zusammenfassen:

    /products-directory /(.*) =>/products-top-level-page 
     
    /about-directory /(.*) =>/about-top- Level-Seite 
     
    /Services-Verzeichnis /(.*) =>/Services-Top-Level-Seite 
    
  3. Für eine Reihe von Top-Level-Seiten, die einem bestimmten Muster entsprechen, möchte ich sie in bestimmte Kategorien einteilen, z. Die Dateinamen beginnen alle mit denselben zwei Wörtern: same-Word-variant-variant.html und ich möchte, dass sie ihre vorhandenen Dateinamen beibehalten - wenn ich meine Permalinks so einstelle, dass sie mit `.html` enden, funktioniert dies , Ich glaube:

    /same-Word (. *) =>/newcategory/$1
    

    Wie würde ich die Regel erstellen, wenn ich keine Permalinks habe, die auf ".html" enden? (Ich glaube ich habe gesehen! Ist das "nicht" Zeichen, aber nicht sicher, wie man es hier benutzt - oder?):

    /same-Word (. *) => /newcategory/$1!\.html
    
  4. Sobald ich die oben genannten Seiten identifiziert und umgeleitet habe, lösche ich den gesamten Rest (Müll) und möchte Benutzer zur Startseite (oder zu einem zufälligen Beitrag?) Senden.

    Also, 2 Fragen hier:

    1. Wie erstelle ich die Regel, die besagt, dass "für alle Dateien außer den bereits wie oben umgeleiteten"

    2. Wie kann ich verhindern, dass diese Regel auf neue Seiten und Posts angewendet wird, die ich von nun an erstelle?

    Eine Idee ist, dass beim Löschen eine 404-Seite nicht gefunden wird und ich die Regel für die 404-Seite selbst erstellen sollte. Will ich das tun?

    Wie ich bereits sagte, wurde die Website schlecht entwickelt (der Kunde hat die Leute angewiesen, einfach "eine Seite hochzuwerfen", ohne auf die richtige Architektur, SEO usw. zu achten) - es gibt praktisch kein Ranking oder externe/Backlinks Sorgen machen, aber ich möchte den besten Ansatz aus einer SEO- und richtigen Entwicklungsperspektive verstehen.

  5. Sollte ich auch vorhandene Bilder usw. in das Verzeichnis wp-content verschieben oder in den vorhandenen Unterverzeichnissen belassen? Meine Neigung ist es, wirklich sauber zu fegen - alles loszuwerden, was unordentlich erscheint, aber ich bin mir nicht sicher, ob dies mehr Arbeit wäre, als es wert ist ...

Vielen Dank im Voraus für jede Anleitung.

5
CJN

Hi @CJN: ,

Ihre erste Frage, das Verschieben des WordPress-Verzeichnisses, wird anders behandelt als der Rest.

Verschieben von WordPress aus dem Unterverzeichnis in das Stammverzeichnis:

Rufen Sie /wp-config.php auf und fügen Sie Folgendes hinzu, um zu definieren (wobei Sie natürlich die Domain Ihres Kunden anstelle von example.com verwenden):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Weiterleitungen mit template_loader und wp_safe_redirect()

Sie können die meisten Ihrer restlichen Fragen lösen, indem Sie .htaccess ändern, wie @ Kau-Boy zeigt, oder Sie können dies einfach in PHP tun. WordPress verfügt über einen template_redirect-Hook, den Sie zusammen mit der Funktion wp_safe_redirect() verwenden können, um mit einem 301-HTTP-Statuscode umzuleiten. Wie Sie sehen, ist der Rest nur brachial für PHP Code und ein bisschen Magie für reguläre Ausdrücke. Sie können diesen Code praktisch überall in die functions.php-Datei Ihres Themas einfügen:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

Betrachten Sie Benutzerfreundlichkeit und nicht nur SEO?

Ich würde fragen, ob Sie wirklich # 2 tun wollen? IMO, das eine Site für Benutzer weitaus weniger nutzbar macht als eine, die ausschließlich für vermeintliches SEO optimiert ist (und als Gründer und einmaliger Mitorganisator von dieser Gruppe Ich bin kein SEO-Neuling.) Ich würde viel tun Stattdessen ziehen Sie einfach den "-directory" aus dem ersten Segment des URL-Pfads. JMTCW trotzdem.

404 Seiten generieren?

Wenn Sie eine 404 ausgeben müssen, können Sie dies mit dem Header tun:

header("HTTP/1.0 404 Not Found");
exit;

Aber ich denke, das ist nicht das, was Sie tun möchten, richtig? Ich denke, Sie können jede Umleitungslogik erreichen, die Sie benötigen, indem Sie die Funktion PHP oben ändern und auf die HTTP-Anforderung mit einem 301 antworten, richtig?

Bilder in die Medienbibliothek importieren und 301 umleiten

Sie könnten sie in die Medienbibliothek verschieben und auf diese Weise in Zukunft verwalten. Hier ist ein Plugin, das vielleicht hilft (obwohl ich nicht sicher bin, ob es mit 3.0 funktioniert; wenn nicht, ist es eine gute Codebasis, mit der man sowieso arbeiten kann):

Hardcoding Image URL 301 Leitet mithilfe eines Arrays um

Dann, da es eine einmalige Sache wäre könnten Sie einfach Ihre Bild-URLs in ein Array festcodieren und sie verwenden, um sie in Ihrer Umleitungsfunktion abzugleichen. Wenn Sie den Standardwert in der switch-Anweisung im obigen Code ändern, sieht er möglicherweise folgendermaßen aus:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

Verwenden von preg_match() bis 301 Umleiten von Bildern nach URL-Muster

Wenn Ihre Bild-URLs einem Muster folgen, können Sie natürlich stattdessen einen Großteil oder alle Bilder des Arrays mithilfe einer preg_match() rationalisieren:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

Hoffe das hilft?

8
MikeSchinkel

Es gibt ein Plugin zum Wechseln von einer Permalink-Struktur zu einer anderen, aber ich bin mir ziemlich sicher, dass dies für Ihre Bedürfnisse nicht ausreichen wird. Sie müssen einige .htaccess-Umschreibregeln verwenden. Ich versuche, Ihnen einige Beispiele für Ihre Bedürfnisse zu geben (nicht sicher, ob sie alle korrekt sind). Fügen Sie all diese Zeilen in eine Datei mit dem Namen ".htaccess" im Stammverzeichnis Ihres Servers ein. Raus über den WordPress-Regeln:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

Das Flag [R = 301] teilt dem Client-Browser oder der Suchmaschine mit, dass es sich um eine permanente Weiterleitung handelt.

Sie werden wahrscheinlich alle Permalinks in Ihrer WordPress-Datenbank aktualisieren wollen. Ich habe einen Artikel über das Aktualisieren von Strings in der Datenbank geschrieben . Leider habe ich den Beitrag noch nicht übersetzt. Die Abfragen sollten aber klar sein, ansonsten einfach die MySQL-Dokumente verwenden.

1
2ndkauboy

Ich benutze Folgendes: Simple 301 Redirects plugin - habe es einige Seiten zuvor verwendet, und ich werde bald meine Webdesign-Website mit all ihren Dateien und Ordnern in meine WP -Dateien verschieben.

0
Steve Shearer