JTL Shop 5Beispiel für große Anzahl Weiterleitungen
Einleitung
Bei der Migration auf JTL Shop 5 stehen Shopbetreiber oft vor der Herausforderung, große Mengen an URL-Weiterleitungen einzurichten. Das integrierte Weiterleitungsmodul stößt bei mehr als 10.000 URLs häufig an seine Grenzen. Diese Anleitung zeigt Ihnen eine effiziente Alternative, mit der Sie problemlos mehrere hunderttausend Weiterleitungen erstellen können.
Problematik des Standard-Moduls
Das integrierte JTL-Weiterleitungsmodul (Adminpanel → SEO → Weiterleitungen) weist folgende Einschränkungen auf:
- Timeout-Probleme bei größeren Datenmengen (ab 10.000 URLs)
- Inkonsistente Erkennung bereits hinterlegter Weiterleitungen
- Eingeschränkte Performance bei der Verarbeitung
Die Alternative Lösung
Unsere Lösung nutzt die bestehende Datenbankstruktur von JTL-Shop, implementiert aber einen eigenen, performanten Weiterleitungsmechanismus.
1. Vorbereitung der Daten
- Exportieren Sie die aktuellen Shop-URLs mit Artikelnummern als CSV
- Erstellen Sie eine Mapping-Tabelle zwischen alten und neuen URLs
- Nutzen Sie die Artikelnummern als Verbindungselement
2. Anpassung der .htaccess
Passen Sie die Pfade (en/, fr/, products/) an Ihre spezifische Shop-Struktur an.
3. Implementation der redirect.php
<?php /** * URL-Weiterleitungsscript für JTL-Shop 5 * Verarbeitet eingehende URLs und leitet sie entsprechend weiter */ // Fehlerberichterstattung ausschalten error_reporting(0); ini_set('display_errors', 0); // URL aus GET-Parameter auslesen $requestUrl = $_GET['url'] ?? ''; try { // Datenbankverbindung herstellen $db = new PDO( "mysql:host=localhost;dbname=**database_name**", "**username**", "**password**", [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ] ); // Weiterleitung in der Datenbank suchen $stmt = $db->prepare(" SELECT cToUrl FROM tredirect WHERE cFromUrl = ? "); $searchUrl = '/' . $requestUrl; error_log("Searching for URL: " . $searchUrl); $stmt->execute([$searchUrl]); // Wenn Weiterleitung gefunden wurde, 301 Redirect ausführen if ($row = $stmt->fetch()) { header("HTTP/1.1 301 Moved Permanently"); header("Location: " . $row['cToUrl']); exit; } } catch (Exception $e) { error_log("Redirect Error: " . $e->getMessage()); } // Wenn keine Weiterleitung gefunden wurde, zur ursprünglichen URL weiterleiten $_SERVER['REQUEST_URI'] = '/' . ltrim($requestUrl, '/'); require __DIR__ . '/index.php';
Sicherheitshinweise
WICHTIG:
- Speichern Sie Datenbank-Zugangsdaten niemals direkt im Script
- Nutzen Sie eine separate Konfigurationsdatei außerhalb des Web-Root
- Erstellen Sie vor der Implementation ein vollständiges Backup
Fazit
Mit dieser Lösung können Sie problemlos mehrere hunderttausend Weiterleitungen verwalten. Die Implementation ist schlank, performant und vermeidet die typischen Einschränkungen des Standard-Moduls. In der Praxis wurde diese Methode bereits erfolgreich mit über 500.000 URLs eingesetzt.
💡 Alternative für extreme Lastszenarien
Für Szenarien mit sehr hohem Weiterleitungsaufkommen (mehrere hunderttausend URLs) gibt es eine noch performantere Alternative: Apache RewriteMaps mit DBM Hash Files.
Vorteile dieser Methode:
- Verarbeitung direkt auf Apache-Ebene (kein PHP-Overhead)
- Keine Datenbankabfragen notwendig
- Optimale Performance auch bei extremen Weiterleitungsmengen
- Geringere Serverlast
Diese Alternative eignet sich besonders für große Migrationen mit mehr als 500.000 Weiterleitungen oder bei sehr hoher Zugriffslast.