jochen: mod_rewrite-Frage

Hallo Leute,

ich möchte eine dynamische Url wie z.B. /index.php?cPath=1&osCsid=7d824ca98dbacac769d93a068d8125a5 auf eine statische wie z.B. artikel_xy.html umschreiben. So weit, so gut, das funktioniert (über die Datei .htaccess) auch. Wenn ich die statische URL in die Browserzeile eingebe, wird die dynamische Seite mit dieser URL geladen.

Jetzt kann ich aber nicht das ganze Projekt umstricken, um überall Links auf die statischen Siten einzuführen. Also habe ich gedacht, o.k., schreibe ich halt einen Redirect der dynamischen Seiten(bzw. Links) auf die statischen Seiten und werde sofort und auch in der Browseradresszeile sichtbar auf die statische Adresse umgeleitet. Leider funktioniert das nicht so wie ich mir das gedacht habe. Es funktioniert nämlich gar nicht.

Hier die Rules:

RewriteEngine on
Options +FollowSymlinks

RewriteRule ^artikel_(.*).html$ product_info.php?products_id=$1&osCsid=$2
Redirect permanent /product_info.php?products_id=([0-9]*)&osCsid=(.*) http://localhost/archiv/artikel_$1.html

Weiss jemand was falsch läuft? Oder funktioniert das überhaupt so wie ich mir das gedacht habe?

Gruss, Jochen

  1. hi,

    RewriteRule ^artikel_(.*).html$ product_info.php?products_id=$1&osCsid=$2
    Redirect permanent /product_info.php?products_id=([0-9]*)&osCsid=(.*) http://localhost/archiv/artikel_$1.html

    erstmal generell: was soll das?

    zuerst schreibst du artikel_748584.html in product_info.php?products_id=748584&osCsid= um (eine gruppierung, die inhalte für $2 liefern könnte, gibt es in deinem ausdruck ja gar nicht).

    und direkt anschliessend willst du den product_info.php?...-link wieder in die artikel-schreibweise zurückwandeln?

    sinn ...?

    btw: sind bei redirect überhaupt RegEx-muster erlaubt?

    gruss,
    wahsaga

    1. Ich schreibe damit nicht "artikelxy" zu dynamisch um sondern umgekehrt. Die Seite existiert jetzt jedenfalls unter der statischen URL.
      Den Redirect mache (oder vielmehr versuche) ich um Suchmaschinen dazu zu bringen die Seite auch unter der statischen URL zu indexieren und um dem Benutzer die Seite auch unter dem statischen URL anzuzeigen. Ich will also nicht die statische wieder in eine dynamische URL oder Seite wandeln, sondern bei Aufruf des dynamischen auf den statischen Link redirecten.
      Die Links unter OSCommerce kann ich ja leider nicht anpassen, jedenfalls nicht in vernünftiger Zeit.

      Die Variable $2 (SessionID) soll in der URL nicht angezeigt, aber übergeben werden, damit der Warenkorb noch funktioniert.

      Das funktioniert auch alles soweit, nur der Redirect des dynamischen Links auf den statischen, der funzt nicht. D.h., bei Aufruf der dynamischen Seite bleibt die dynamische URL.

      Ich weiss leider nicht was RegEx-Muster sind, sonst könnte ich Dir vielleicht dazu etwas sagen.

      Gruss, Jochen

  2. Hey,

    Jetzt kann ich aber nicht das ganze Projekt umstricken, um überall Links auf die statischen Siten einzuführen. Also habe ich gedacht, o.k., schreibe ich halt einen Redirect der dynamischen Seiten(bzw. Links) auf die statischen Seiten und werde sofort und auch in der Browseradresszeile sichtbar auf die statische Adresse umgeleitet. Leider funktioniert das nicht so wie ich mir das gedacht habe. Es funktioniert nämlich gar nicht.

    Der Ansatz ist dusselig, und keineswegs benutzerfreundlich. Du verlangsamst
    damit nur den Seitenaufbau.

    Wenn du dir schon osC ausgesucht hast, dann mußt du halt damit leben;
    korrigieren läßt sich da nichts mehr, insbesondere nicht die merkwürdigen
    URLs die es ausspeit.

    Weiss jemand was falsch läuft? Oder funktioniert das überhaupt so wie ich mir das gedacht habe?

    Du hast sicher eine Endlosschleife erzeugt, bei sowas hilft mitunter das
    [L] Flag bei der ersten RewriteRule.

    MsF,
    milky

    1. Der Ansatz ist dusselig, und keineswegs benutzerfreundlich. Du verlangsamst
      damit nur den Seitenaufbau.

      Ich "liebe" konstruktive Kritik.

      Wenn du dir schon osC ausgesucht hast, dann mußt du halt damit leben;

      wenn immer alle Alles so akzeptiert hätten, wie sie es vorgefunden haben, sässen wir heute noch auf Bäumen und kauten Bananen. Insbesondere das mod_rewrite wäre bestimmt nie programmiert worden.

      Du hast sicher eine Endlosschleife erzeugt, bei sowas hilft mitunter das
      [L] Flag bei der ersten RewriteRule.

      Bei einer Endlos-Schleife wäre die Seite nicht mehr erreichbar.

      Gruss, Jochen

      1. Hey,

        Ich "liebe" konstruktive Kritik.

        Glücklicherweise ist das mein Lieblingshobby ;)
        Und ich bin nach wie vor der Meinung, daß du die Dinge nur
        verschlimmerst, wenn du mod_rewrite als Workaround für Fehler
        in osC verwendest.

        Insbesondere wird es aber nichts bringen, wenn du versuchst den
        Suchmaschinen deinen Shop aufzudrücken. Die Cookie-URLs die osC
        ausspuckt machen keinen Sinn, weil dann jeder der über Google
        hereinkommt auch seine Waren in den Warenkorb vom Googlebot packt.
        (Mal davon abgesehen, daß andere Suchmaschinen osC-Seiten nicht
        indizieren, wenn Last-Modified: und ETag: fehlen - da bringen auch
        die hübscheren URLs nix).

        Bei einer Endlos-Schleife wäre die Seite nicht mehr erreichbar.

        Ich hab das mit der Redirect-Direktive falsch gelesen, und in deiner
        Reihenfolge war's auch in Ordnung. Nixdesto solltest du auf "Redirect"
        verzichten, und hier wirklich mal die RewriteRule-Flags probieren
        (siehe Apache-Doku).

        RewriteRule /product_info..._id=([0-9]*)&osCsid=(.*) http://localhost/archiv/artikel_$1.html [R=301,L]
        RewriteRule ^artikel_(.*).html$ product..._id=$1&osCsid=$2 [L]

        "&osCsid=$2" in der zweiten Regel (das "GoogleBot-Warenkorb-Cookie")
        wird nicht funktionieren, weil du es in der verkürzten URL nicht
        reingebastelt hattest - versuche also besser gleich diese langen URLs
        in osCommerce abzuschalten *totlach*

        MsF,
        milky