Alex: Produktsuche in Browserzeile durch ErrorDocument

Hallo zusammen,
ich habe vor einen Online-Shop zu bauen.
Als besonderes Feature möchte ich den Besuchern die Möglichkeit geben direkt in der Browserzeile nach Artikeln zu suchen.
Z.b. soll bei einem Aufruf von "www.shop.loc/Levis Bluejeans"
alle Bluejeans von Levis gelistet werden. Ebenso soll es möglich sein in der Browserzeile direkt Artikelnummern einzugeben. Z.b. "www.shop.loc/123456" soll direkt zum Artikel mit der Nr. 123456 angezeigt werden.

Wie mache ich das am besten?

Also mein Ansatz war folgender:
Ich habe meinen Apache so konfiguriert das als ErrorDocument 404 auf eine php Datei auf meinem Server verweißt. Dann lese ich $_SERVER['REQUEST_URI'] aus.
Das funktioniert auch ganz gut, bis auf ein großes Problem.
Wenn der user z.B. "www.shop.loc/test/test" eingibt, dann funktionieren die relativen Links nicht mehr. Es sieht so aus als würde die php Datei in dem Unterverzeichnis ausgeführt.

Für Vorschläge und Anregungen bin ich genauso dankbar wie für ein vernichtendes Urteil.

Alex

  1. echo $begrüßung;

    Als besonderes Feature möchte ich den Besuchern die Möglichkeit geben direkt in der Browserzeile nach Artikeln zu suchen.
    Ich habe meinen Apache so konfiguriert das als ErrorDocument 404 auf eine php Datei auf meinem Server verweißt.

    Wenn das Dokument dann nicht mit dem Status 404 ausgeliefert werden soll musst du den Status dann auch noch anpassen. Das wirst du hoffentlich berücksichtigt haben.

    Wenn der user z.B. "www.shop.loc/test/test" eingibt, dann funktionieren die relativen Links nicht mehr. Es sieht so aus als würde die php Datei in dem Unterverzeichnis ausgeführt.

    Der Browser reagiert auf diese / und passt die relativen Links darauf an. Das kannst du nicht verhindern. Verwende absolute Links für z.B. eingebundene Bilder.

    Besser als das ErrorDocument fände ich ein Umschreiben, z.B. mit mod_rewrite, so dass letztlich /script.php/test/test oder ähnlich aufgerufen wird. Dadurch wird script.php ausgeführt, wenn der Apache es finden kann, und der Rest als PATH_INFO übergeben.

    echo "$verabschiedung $name";

    1. Besser als das ErrorDocument fände ich ein Umschreiben, z.B. mit mod_rewrite, so dass letztlich /script.php/test/test oder ähnlich aufgerufen wird. Dadurch wird script.php ausgeführt, wenn der Apache es finden kann, und der Rest als PATH_INFO übergeben.

      Hi again,
      Besten Dank für den Tip! mod_rewrite ist wirklich die elegantere Lösung.
      Habe folgende RewriteRule genommen:
      RewriteRule ^/([^/]*$) /script.php?keywords=$1

      Eigentlich funktioniert auch alles ganz gut. Und das Problem mit den relativen links gibt es so auch nicht mehr. Nur zwei Sachen wundern mich:
      1. Müsste nun nicht eigentlich auch bei einem Aufruf von /index.php "index.php in der Variable gespeichert werden? Bei mir erfolgt keine Umleitung, warum auch immer.
      2. Wenn ich eine existierende Datei aufrufe und am ende irgendwas anhänge also z.B. /index.phptest wird "/index.phptest" in der variable gespeichert. Müsste das nicht eigentlich "index.phptest" heißen?

      Habe ich nen Fehler in der Regel?
      Alex

      1. echo $begrüßung;

        Habe ich nen Fehler in der Regel?

        Probier mal diese Regel

        RewriteEngine On
        RewriteCond $1 !=script.php
        RewriteRule (.*) script.php?keywords=$1

        Die RewriteRule passt auf alles was kommt, jedoch nicht wenn script.php aufgerufen wird. Das wird durch die RewriteCondition ausgeschlossen. Die Condition ist da, weil der Rewrite-Prozess noch ein zweites Mal mit der bereits erfolgten Ersetzung durch die Rule läuft und diese nochmal verändert.

        echo "$verabschiedung $name";