.htaccess rewrite

  • Hallo zusammen!


    Bei einem Relaunch haben wir die Ordnerstruktur und Namenskonventionen für vorhandene (& neue) Inhalte geändert. Nun gibt es natürlich tausende Bookmarks, die ins Leere führen. Normalerweise kann das ja relativ einfach mit einer Rewrite-Anweisung in der .htaccess behoben werden. Konkret wären das folgende Weiterleitungen:


    www.mydomain.de/zeitschrift/ausgabe/250_ThemaXY (Infos zur Ausgabe) oder

    www.mydomain.de/zeitschrift/ausgabe/250_ThemaXY/artikel/audiobeitrag?b_start:int=26 (Artikel in einer Ausgabe mit zusätzlichen Query-String)

    soll beides weitergeleitet werden auf

    www.mydomain.de/printausgabe/heft-250


    In der .htaccess steht dann

    Apache Configuration
    RewriteEngine On
    RewriteRule "^zeitschrift/ausgabe/([0-9]{3})(.*)$" "printausgabe/heft-$1" [R,QSD]

    Bei mir lokal auf dem Rechner (mac mit apache) funktioniert das auch wunderbar!


    Also:

    1. Das Verzeichnis zeitschrift/ausgabe/ wird in das neue Verzeichnis printausgabe/ geleitet. (Funktioniert komischerweise nicht mit vorangestelltem /)
    2. Die ersten drei Zahlen [0-9]{3} werden zur weiteren Verwendung "gespeichert". Der Rest der URL verworfen, bzw. in einer dann nicht weiter verwendeten "Back-Reference" gespeichert (.*)$.
    3. Im neuen Verzeichnis printausgabe wird dann die Seite heft-$1 ($1 wird durch die ersten drei Zahlen ersetzt) aufgerufen. Die Flag QSD steht für "Query String Discart", verwirft also in unserem Fall das ?b_start:int=26

    Leider funktioniert das auf der Live-Seite überhaupt nicht!


    Die .htaccess wird aufgerufen und verarbeitet. Als QuickFix habe ich z.B. RedirectMatch permanent /zeitschrift/ausgabe/250_ThemaXY /printausgabe/heft-250 reingeschrieben. Das funktioniert, ist aber unbefriedigend, da das für jede Ausgabe manuell eingetragen werden muss und außerdem der Query-String erhalten bleibt…


    Irgendwelche Ideen? Danke!


    (Das ganze läuft übrigens auf einem "Reseller Webhosting 4000"-Paket)

    Einmal editiert, zuletzt von a-v-l () aus folgendem Grund: typo

  • Hallo,

    kann es sein, das an deinem Test-Rechner, die Redirects gecached sind? Ich habe es mal in einem Reseller Webhosting 1000 getestet. Dort Funktioniert deine RewriteRule.


    Allerdings muss statt printausgabe/ im Reseller Hosting /printausgabe/ angeben werden, da sonst der komplette Path des Ordners mit an die URL angehangen wird.

  • Danke für deine Antwort!

    Ich habe es mit folgenden Varianten versucht:

    Apache Configuration
    RewriteEngine On
    RewriteRule "^zeitschrift/ausgabe/([0-9]{3})(.*)$" "printausgabe/heft-$1" [R,QSD]
    Apache Configuration
    RewriteEngine On
    RewriteRule "^/zeitschrift/ausgabe/([0-9]{3})(.*)$" "/printausgabe/heft-$1" [R,QSD]
    Apache Configuration
    RewriteEngine On
    RewriteRule "^zeitschrift/ausgabe/([0-9]{3})(.*)$" "/printausgabe/heft-$1" [R,QSD]

    Funktioniert bei netcup alles nicht.


    Bei den "Einstellungen für Apache & nginx" ist mir jetzt auch nichts aufgefallen, was dem Rewrite entgegensteht…


    Es könnte allerdings sein, dass es was mit dem Rest der .htaccess-Datei zu tun hat. Ich verwende Contao auf der Seite. Die vorhandene .haccess-Datei ist diese: https://github.com/contao/cont…skeleton/public/.htaccess

    Mein RewriteRule habe ich direkt unter RewriteEngine On in der 2. Zeile eingefügt.

  • Ok, dann habe ich dein Problem gefunden.


    In deiner Rewrite Rule hast du nur R,QSD angeben. Somit werden weitere Rules auch angewendet. Das führt dazu, dass auch die RewriteRule ausgeführt wird, die alle Request auf die index.php von Contao weiterleitet ( Zeile 42 in https://github.com/contao/cont…skeleton/public/.htaccess ) . Da diese Rule ohne das R Attribut versehen ist bleibt die URL unverändert. Contao versucht intern die alte Seite zu finden.


    Die korrekte Rule ist:

    Apache Configuration
    RewriteEngine On
    RewriteRule "^zeitschrift/ausgabe/([0-9]{3})(.*)$" "/printausgabe/heft-$1" [L,R,QSD]


    So wie ich gesehen habe, hängt Contao standartmäßig an die Seiten URLs ein ".html" an. Das kann auch noch dafür sorgen, warum die neue Seite nicht angezeigt wird.

  • Vielen Dank – das war's!


    Zitat

    So wie ich gesehen habe, hängt Contao standartmäßig an die Seiten URLs ein ".html" an. Das kann auch noch dafür sorgen, warum die neue Seite nicht angezeigt wird.

    Das könnte vielleicht ein weiteres Thema sein, falls der Suffix ".html" eingesetzt wird – was auf der fraglichen Seite aber nicht der Fall ist…