TutorialsJTL Shop 5 Weiterleitungen
JTL Shop 5 Sprachdateien Installation

JTL Shop 5Beispiel für große Anzahl Weiterleitungen

16. Januar 2025
Niklas Priddat

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

# Redirect-Regel für spezifische Pfade RewriteRule ^(en/|fr/|products/)(.*)$ redirect.php?url=$1$2 [QSA,L]

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.