Weiterleiung per RewriteRule

  • Nachdem mein Hilfeersuchen (http://forum.wpde.org/konfiguration/…db-wechsel.html) leider keine Lösung meines Problems erbrachte, kam ich auf die Idee, die "falschen" Links per RewriteRule in der .htaccess auf den richtigen Pfad zu bringen. Nur, wie muß diese Rule syntaktisch richtig geschrieben werden?

    Die an: http://www.domainname.de/?p=xxxxx gerichteten Aufrufe, mit den IDs (xxxxx) von 0 bis 19900 sollen umgeleitet werden auf: http://archiv.domainname.de/?p=xxxxx

    Vielleicht findet sich ja zu diesem Problem jemand, der mir freundlicherweise weiterhelfen kann. Danke.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Du wirst auch nicht ein einziges Beispiel finden, wenn Du in einer Suchmaschine den Begriff 'Weiterleitung' eingibst, weil die geschätzten 100.000 Seiten mit Beispielen einer für Dich geeigneten Weiterleitung heute Morgen alle aus dem Internet entfernt wurden.

    Notieren in der alten htaccess und ablegen im Rootverzeichnis von der alten Domain:

    Code
    RedirectPermanent / http://www.name-deiner-neuen-domain.de/

    mod_rewrite ist dafür nicht erforderlich, da das durch mod_alias geregelt wird. Es sei denn es verweisen mehrere Domains auf das alte Root-Verzeichnis, dann ist mod_rewrite gefragt.

    Apache Configuration
    RewriteEngine on
        
        RewriteCond %{HTTP_HOST} ^www\.deine-alte-domain\.de$ [NC]
        RewriteRule ^(.*)$ http://www.name-deiner-neuen-domain.de/$1 [L,R=301]

    Einmal editiert, zuletzt von Melewo (1. Oktober 2013 um 11:33)

  • Hallo Melewo,

    vielleicht habe ich mich nicht ganz klar ausgedrückt. Die Beiträge mit den IDs von 0 bis 19900 sind bei den Suchmaschinen mit der URL "http:http://www.domainname.de" verbunden. Diese Domain lautet jetzt aber "http://archiv.domainname.de", während alle Beiträge mit IDs ab 19901 unter "http:http://www.domainname.de" zu finden sind. Ein Aufruf von "http:http://www.domainname.de/?=10000" führt heute also zu einem 404er, denn dieser Artikel ist jetzt ja nur noch unter der Subdomain "http://archiv.domainname.de" zu erreichen. Ich müßte also alle Beiträge mit einer ID < 19900 die an die alte(neue) URL gerichtet sind auf das Archiv umleiten.
    Ich hoffe, daß diese Ergänzung das Problem verdeutlicht. Ein einfacher Redirect dürfte imho nicht die Lösung sein.
    Dennoch schon mal vielen Dank für die Mühe.

  • Vergleichsoperatoren für die htaccess ähnlich einem if-Statements mit < 19901 oder > 19901 kenne ich nicht. Und da beide 5stellig sein können, nutzt Dir auch kein Ausdruck mit \d{1,5} etwas. Du könntest nach meiner Meinung nur einen Trick anwenden, in dem Du in einer präparierten 404-Seite eine PHP-Weiterleitung einfügst.


    Das Beispiel ist jetzt ungetestet, doch diese Beispiele habe ich getestet, wobei das obere nur abgewandelt ist:

    http://www.seo-welten.de/webcoding/redi…en-in-masse.htm

    Einmal editiert, zuletzt von Melewo (1. Oktober 2013 um 12:59)

  • Ist jetzt auch ungetestet, wobei ich so eine Schreibweise [0-1]{1}[0-8]{1}[0-9]{1,3} auch immer erst testen muss, doch eigentlich sollte die erste Kondition von 0 bis 9999 und die zweite von 10000 bis 18999 greifen. Wäre dann saubere als die PHP Variante.

    Apache Configuration
    RewriteEngine on
    
    
    RewriteCond %{QUERY_STRING} ^p=\d{1,4}$
    RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
    RewriteRule ^(.*)$ http://www.archiv.example.com/$1 [L,R=301]
        
    RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
    RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
    RewriteRule ^(.*)$ http://www.archiv.example.com/$1 [L,R=301]

    Eventuell aber auch eher so:

    Apache Configuration
    RewriteEngine on
    
    
    RewriteCond %{QUERY_STRING} ^p=(\d{1,4})$
    RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1 [L,R=301]
        
    RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
    RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1 [L,R=301]

    Wie gesagt, das müsste man austesten, was da die richtige Schreibweise ist, anders wird das nichts.

    Je länger ich mir das anschaue, um so mehr halte ich die letzte Schreibweise für die richtige und dann vielleicht noch jeweils mit einem abschließenden Fragezeichen, um weitere Anhänge zu vermeiden:

    Apache Configuration
    RewriteEngine on
    
    
    RewriteCond %{QUERY_STRING} ^p=(\d{1,4})$
    RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1? [L,R=301]
        
    RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
    RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1? [L,R=301]

    Doch genau weiß man es halt erst nach einigen Tests.

    Einmal editiert, zuletzt von Melewo (1. Oktober 2013 um 14:55)

  • Das Beispiel ist ganz toll - denn zumindest wird der Leser schon mal auf die zum Archiv gewordenen Site gelenkt. Alllerdings nur auf die Startseite. Die Artikel-ID wird offensichtlich nicht übergeben. Es wäre schön, wenn Sie das auch noch hinkriegen. Danke.

    Meiner ersten Idee, einen Link zur archivierten Site auf der 404-Seite zu plazieren samt angehängter ID, können Sie wohl nichts abgewinnen?

  • Habs gerade selbst rausbekommen. Diese Zeile habe ich geändert:
    header("Location: http://archiv3.domain.de/?=%22.$alte);

    In der Mail des Forums stand:
    ... com".$leiteum);

    wobei mir auffiel, das leiteum gar nicht definiert war.
    In Deinem Eintrag hier im Forum steht es aber völlig richtig, wie ich gerade feststelle. Wie kommt denn das?

    Würde Ihnen zu der Link-Variante dennoch etwas einfallen? Auf jeden Fall tausend Dank, denn dieses Problem hat mich schon genervt.

    Gruß Klaus

  • Die Artikel-ID wird offensichtlich nicht übergeben.


    Beim ersten Beispiel, bei den anderen beiden sollte die eigentlich mit %1 übernommen werden. Oder der Ausdruck enthält Fehler und mir fehlt zum Testen etwas die Zeit, weil ich dafür erst einmal entsprechende Beispiele konstruieren müsste.

    Um 11.50 enthielt das erste Beispiel noch eine andere Variable, doch
    Geändert von Melewo (Heute um 11:59 Uhr)

    Einmal editiert, zuletzt von Melewo (1. Oktober 2013 um 15:07)

  • Also, ich habe nur einmal die Ausdrücke mit PHP getestet und die scheinen schon richtig zu sein und eigentlich sollte eines der beiden letzten mod_rewrite-Beispiele richtig funktionieren. Kommt auch darauf an, wo Du diese in einer htaccess notierst. Möglichst vor weiteren Regeln, ist zumindest meistens gut und zwischen zwei Tests immer den Cache vom Browser löschen, ist auch wichtig.

    Einmal editiert, zuletzt von Melewo (1. Oktober 2013 um 15:52)

  • So, abgelegt unter einer WP-Installation unter Localhost und wenn ich nun eine Seite mit "http://localhost/version/?p=" und mit p= unter 19000 aufrufe, erfolgt eine Weiterleitung auf die entsprechende Seite im Web, nur das ich noch keine so großen Zahlenwerte im Web habe.

  • Hallo Melewo,
    nun zu Hause, habe ich mir alles notiert, was Sie nach 15 Uhr geschrieben haben - man weiß ja nie, wann man es noch mal braucht. Die Variante mit der angepaßten 404-Seite funktioniert und damit bin ich vollkommen zufrieden. Mit größter Hochachtung vor Ihrem Wissen bedanke ich mich für Ihre Mühe. Herzliche Grüße. Klaus

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!