Geänderte URL: alte trotzdem zielführend?

  • Hallo,

    wie kann man erreichen, dass nach Änderung der Tag-Basis die dadurch ungültig gewordenen URLs trotzdem zum richtigen Ziel führen?

    Wenn man zum Beispiel die Tag-Basis von "suchwort" nach "stichwort" ändert, sind URLs nach dem Schema domain.de/suchwort/bla nicht mehr gültig, sondern nur noch domain.de/stichwort/bla. Wie kann man jetzt beim Aufruf von domain.de/suchwort/bla den String "suchwort" durch den String "stichwort" ersetzen? Geht das irgendwie mit .htaccess und mod_rewrite?

    Liebe Grüße
    Hugo

    • 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

  • Genau, in der .htaccess noch vor allen mod_rewrite-Rules folgendes einfügen:

    Code
    RedirectMatch permanent ^/suchwort(.*)    /stichwort$1


    Es wird hier mod_alias verwendet, welches oft auch dann verfügbar ist, wenn mod_rewrite nicht geht (z.B. frühr bei Strato).

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Dein Beitrag kommt mir wirklich wie gerufen. Ich war gerade dabei auszuprobieren, jedoch bis dato erfolglos. Deine Variante funktioniert, vielen Dank! :-D

    Allerdings müsste es doch eigentlich auch mit

    Apache Configuration
    RewriteRule suchwort stichwort

    funktionieren, was ist daran falsch (es funktioniert nämlich nicht)?

  • So mal ganz auf die Schnelle kann man das nicht erklären. Basisinformationen zu mod_rewrite findet man hier und Beispiele hier. Zudem ist Grundwissen zu regulären Ausdrücken nicht verkehrt.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Deine Regel schreibt alles, was irgendwie "suchwort" enthält auf "stichwort" um, z.B.:
    suchwort/wort1 -> stichwort
    suchwort/wort2 -> stichwort
    suchwort/wortx -> stichwort
    artikel-mit-suchwort -> stichwort

    An der zweiten Stelle der RewrietRule muß immer eine vollständige, neue URI stehen.
    Damit diese neue URI zusammensetzt werden kann, benötigst Du einen passenden regulären Ausdruck, der den Rest aus der Bedingung weiterreicht und zudem verhindert, daß auch URIs umgebaut werden, die irgendwo "suchwort" enthalten.

    So müßte es mit mod_rewrite aussehen:

    Apache Configuration
    RewriteRule ^suchwort(.*) /stichwort$1 [R=301,L]

    Das "Dach" bewirkt, daß die Regel nur paßt, wenn "suchwort" am Anfnag stehte, das (.*) bedeuetet, nach "suchwort" dürfen noch beliebig viele Zeichen folgen. Diese werden durch die Klammern in der Variablen $1 gespeichert und können im Ziel dann verwendet werden, um die neue URI zusammenzusetzen.
    In den eckigen Klammern werden Optionen angegeben, hier bedeuetet R=301 (Redirect), daß eine permanente Weiterleitung per HTTP-Statuscode 301 erfolgen soll. Durch die Option L (Last) werden keine weiteren Regeln ausgeführt.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Ja, das kann sein. Hängt davon ab, ob z.B. als RewriteBase / angegeben ist oder nicht. Wenn es mit funktioniert, dann fehlt es :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Erfahrungsgemäß muß der Slash / nicht davor stehen. Zumindest habe ich das bei meinen Anwendungsfällen so gemacht, also ohne /.

    Ehrlich gesagt, ganz durchschaut habe ich es auch noch nicht, ist eher gefährliches Halbwissen :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

  • Code
    RedirectMatch permanent ^/suchwort(.*)    /stichwort$1

    Dazu noch eine kurze Frage: Wenn ich jetzt einen Artikel habe, dessen Titel (post_name) mit "suchwort" beginnt, wird dieser String ebenfalls durch "stichwort" ersetzt und der Artikel wäre damit nicht mehr ohne weiteres erreichbar, richtig? Um wirklich nur die Tag-Basis zu erfassen, müsste ich anstatt

    Code
    ^/suchwort(.*)

    so etwas wie

    Code
    ^%siteurl%/suchwort(.*)

    angeben, oder? Wobei man in der .htaccess-Datei bestimmt nicht auf siteurl zugreifen kann!?

    Einmal editiert, zuletzt von h-u-g-o (30. Oktober 2009 um 15:54)

  • Also sowas mit siteurl oder Ähnliches geht nicht. Wenn man aber von der Annahme ausgeht, daß nach der Tag-Basis ja auch noch eine Schrägstrich folgt, und dann der eigentlich Tag-Name, kann man den Schrägstrich auch mit einbeziehen:

    Code
    ^/suchwort/(.*) /stichwort/$1

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte :) klicken.

Jetzt mitmachen!

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