2016-07-08 16 views
2

Wordpress Redirects.htaccess Umleitung - Hunderte von Beiträgen

Mein Klient hat eine WP-Website mit einer sehr schlechten Permalinks Struktur und einige hundert „Produkt“ Seiten, die sie als einfache Beiträge mit Haufen von HTML erstellt. Zum Beispiel:

http://www.website.com/article/sony-tv-42-inch 
http://www.website.com/article/iphone-5-2-black 
http://www.website.com/article/samsung-dvd-player-12455 

Ich bin eine neue Website von Grund auf neu und Planung Erstellen von benutzerdefinierten Post-Typen für Produkte Abschnitt zu verwenden und organisieren URLS wie:

http://www.website.com/product/sony/tv-42-inch 
http://www.website.com/product/apple/iphone-5-black 
http://www.website.com/product/samsung/dvd-player-12455 

Da er keinen Verkehr verlieren tut oder SEO-Bewertungen, ich fragte mich, was wäre die einfachste Lösung für htaccess Redirect für ein paar hundert Beiträge? Wenn er nur Dutzende von ihnen hätte, könnte ich es manuell tun, aber ein paar Hundert ... Auch im Hinterkopf, das ist sauber WP installieren mit einem Thema von Grund auf neu gebaut (ich arbeite lokal und höchstwahrscheinlich wird importieren Produkte via CSV-Datei), also kann ich nicht einfach die Permalinks-Struktur auf der Produktionswebsite ändern.

Jede mögliche Hilfe

Antwort

-1

für SEO zu erkennen ist, schlage ich vor, Sie verwenden 301 - Umleitung in der .htaccess

Sie regexp für Umleitung nutzen können.

Beispiel:

RewriteEngine on 
RewriteRule ^/users/(.*)$ http://www.example.com/profiles/$1 [R=301,L] 
0

es ziemlich einfach sein würde für Sie neu zu schreiben von

http://www.website.com/product/sony-tv-42-inch 

zu

http://www.website.com/product/sony-tv-42-inch 

aber die extra/wird ein präsentieren Problem.

Wie von einigen anderen erwähnt, möchten Sie sicherlich eine 301 für SEO-Zwecke, also hier ist, was ich tun würde.

Schritt 1 - aktuelle URLS:

eine Liste aller aktuellen Beitrag permalinks Get. Diese SQL-Abfrage für MySQL von David George sollte den Trick tun.

SELECT wpp.post_title, 
     wpp.guid, 
     wpp.post_date, 
     CONCAT 
     (
      wpo_su.option_value, 
      REPLACE 
      (
      REPLACE 
      (
       REPLACE 
       (
       REPLACE 
       (
        wpo.option_value, 
        '%year%', 
        date_format(wpp.post_date,'%Y') 
       ), 
       '%monthnum%', 
       date_format(wpp.post_date, '%m') 
      ), 
       '%day%', 
       date_format(wpp.post_date, '%d') 
      ), 
      '%postname%', 
      wpp.post_name 
     ) 
     ) AS permalink 
    FROM wp_posts wpp 
    JOIN wp_options wpo 
    ON wpo.option_name = 'permalink_structure' 
    AND wpo.blog_id = 0 
    JOIN wp_options wpo_su 
    ON wpo_su.option_name = 'siteurl' 
    AND wpo_su.blog_id = wpo.blog_id 
WHERE wpp.post_type = 'post' 
    AND wpp.post_status = 'publish' 
ORDER BY wpp.post_date DESC 

Schritt 2 - Speichern Sie es später für: Nun, da Sie diese Liste haben es Dump in eine Excel-Spalte für später.

Schritt 3 - Formatieren Sie es für PHP: Nehmen Sie alle URLs und dump sie in Notepad ++ oder gleichwertig. Auf Windows schlug cntrl + H, um die Suchen/Ersetzen-Funktion aufzurufen. Stellen Sie sicher, Search Mode 'wählen -> ‚Erweitert‘

Für „Suchen“ Sie in \ r \ n und ‚Ersetzen durch‘ sollten Sie setzen in , und klicken Sie auf ‚Alle ersetzen setzen sollten ".

Sie sollten jetzt eine Liste aller URLs haben, die nur durch ein Komma getrennt sind.

Schritt 4 - eine PHP-Datei erstellen:

eine neue PHP-Datei erstellen und festlegen:

<?php 
$urlString = "http://www.urlsample1.com/article/sony-thing-and-stuff, http://www.urlsample1.com/article/warner-brothers-stuff"; 

    //this will replace the word article with the word product 
    $newstring = str_replace("article", "product", $urlString); 
    //turns string into array 
    $myArray = explode(',', $newstring); 
//loops through array to find first case of - and turn it to a/
for ($i = 0; $i < count($myArray); ++$i) { 
     $haystack = $myArray[$i]; 
     $needle = "-"; 
     $replace = "/"; 
     $pos = strpos($haystack, $needle); 

     if ($pos !== false) { 
      $finalstring = substr_replace($haystack, $replace, $pos, strlen($needle)); 
     } 
    //removes common url elements 
    $newShort = str_replace("http://www.urlsample1.com", "", $finalstring); 
    $oldShort = str_replace("http://www.urlsample1.com/product", "/article", $myArray[$i]); 
    //prints out the old and new url in .htaccess format 
    print("Redirect 301 " . $oldShort . " " . $newShort . "</br>"); 
}; 

?> 

Schritt 5 - .Htaccess

von oben Ihre Ausgabe aussehen sollte wie:

Redirect 301 /product/sony-thing-and-stuff /product/sony/thing-and-stuff 
Redirect 301 /product/warner-brothers-stuff /product/warner/brothers-stuff 

und kann in die .htaccess-Datei eingefügt werden.

Hinweis: Diese Methode kann mit Apache langsam werden und ist nicht vorzuziehen, aber es ist der schnellste Weg, den ich mir vorstellen kann, um Ihren Kunden in der neuen Situation zum Laufen zu bringen.

+0

Sie könnten Regex auch verwenden, um es von einer einzelnen Weiterleitung zu behandeln. Es wäre \/[Artikel] {1,} \ /, Artikel auszuwählen und zu 'Produkt' zu ändern, aber ich bin mir nicht sicher, ob die Regex nur die erste Instanz von '-' verarbeiten und nicht alle davon auswählen soll. Deshalb habe ich diese Methode gewählt. Wenn Sie mit Regex besser vertraut sind, können Sie eine einzelne Regel zum erneuten Schreiben erstellen. – AdamSC