Siggy: mod_rewrite

Hallo,

Ich habe mich echt bemüht die Suche zu benutzen, aber viele fälle sind einfach viel zu speziell.
Ich möchte meine Links in verzeichnissen verschalchteln
domain.de/ueberuns/team.htm
domain.de/ueberuns/referenzen.htm
domain.de/kontakt.htm
auch wenn jemand versehentlich
domain.de/gibts/nicht/
eingibt soll alles auf domain.de/index.php umgeleitet werden.
der Apache soll aber tatsächlich von diesem ort aus alles laden. Ich habe nämlich die ganze Zeit das Problem, dass die index.php aufgerufen wird, aber der Apache im virtuellen unterverzeichnis versucht grafiken zu laden wo keine sein können.
alles weitere kann ich ja mit PHP auswerten.

Wie muss die einfache Regel lauten?
Tut mir leid wenn das schon 20.000 mal gefragt wurde...

Danke

Siggy

  1. Hi Siggy!

    Wie muss die einfache Regel lauten?

    http://forum.de.selfhtml.org/archiv/2009/4/t186282/#m1237080
    Suchst du das?

    Näheres zu der RewriteCond-Direktive findest du im Manual zu mod_rewrite.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hallo,

    auch wenn jemand versehentlich
    domain.de/gibts/nicht/
    eingibt soll alles auf domain.de/index.php umgeleitet werden.

    Wenn es die Ressource nicht gibt, meldet der Server einen Status 404 und Du solltest da dem Besucher besser eine Seite zeigen, die diesen Sachverhalt erklärt.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  3. Hi,

    mir scheint, du hast da ein paar prinzipielle Dinge nicht nicht verstanden.

    Ich habe nämlich die ganze Zeit das Problem, dass die index.php aufgerufen wird, aber der Apache im virtuellen unterverzeichnis versucht grafiken zu laden wo keine sein können.

    Nicht der Apache versucht "Grafiken zu laden", sondern der Client fordert sie an.

    Und wenn der das HTML-Dokument von
    http://example.com/blah/blubb.htm
    angefordert hat - welchen Pfad setzt er dann für eine Bildressource zusammen, die im HTML-Dokument nur mit "bild.jpg" referenziert wurde?

    Richtig, http://example.com/blah/bild.jpg

    Diese Ressource gibt es jetzt entweder als physische Datei auf deinem Server, oder eine passende Umleitungsregel, die das woandershin (erfolgreich) auflöst.

    Was von beidem ist bei dir der Fall?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Richtig, http://example.com/blah/bild.jpg

      genau das meine ich.

      Diese Ressource gibt es jetzt entweder als physische Datei auf deinem Server, oder eine passende Umleitungsregel, die das woandershin (erfolgreich) auflöst.

      Was von beidem ist bei dir der Fall?

      Wie jetzt? Natürich ist das bild nicht an dieser Stelle vorhanden, aber es wäre unter http://example.com/bild.jpg erreichbar.
      Ich möchte also in der index.php auswerten, dass /blah/ aufgerufen wurde, es aber niemanden juckt ausser die index.php. ab da läuft dann einfach wieder alles über http://example.com/ nur das ich eben die variablen habe
      REQUEST_DIRECTORY: blah
      REQUEST_FILENAME: whatever.htm
      und selbst wenn die eingabe http://example.com/b/l/a/h/b/l/u/b.htm lautet soll index.php aufgerufen werden.

      Siggy

      1. Hi,

        Natürich ist das bild nicht an dieser Stelle vorhanden, aber es wäre unter http://example.com/bild.jpg erreichbar.

        Gut, dann binde es so ein, dass es auch dort vom Browser angefordert wird. Bspw., in dem du mit einem führenden Slash auf die Domainwurzel referenzierst.

        Ich möchte also in der index.php auswerten, dass /blah/ aufgerufen wurde, es aber niemanden juckt ausser die index.php. ab da läuft dann einfach wieder alles über http://example.com/

        Es gibt kein "ab da".

        Der Client nutzt den Pfad, unter dem er das Dokument angefordert hat zur Bildung der absoluten Pfade aus den relativen, mit denen du die eingebundenen Ressourcen referenziert hast.

        Wenn du das wie oben beschrieben machst, dann musst du noch dafür sorgen, dass für solche Ressourcen dein Rewriting nicht greift - in dem du bspw. das Suchmuster der Regel spezifischer fasst, so dass es Bildressourcen anhand ihrer "Endung" nicht erfasst.
        Oder, in dem du per vorgeschalteter RewriteCond dafür sorgst, dass Requests, zu denen Verzeichnisse oder Dateien existieren, nicht umgeschrieben werden (siehe Apache.Doku bzgl. RewriteCond).

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. ok,

        und selbst wenn die eingabe http://example.com/b/l/a/h/b/l/u/b.htm lautet soll index.php aufgerufen werden.

        RewriteRule ^(.*).html$ /index.php

        schießt alle Requests an .html um auf index.php, aber um die 404 Geschichten musst Du Dich schon noch kümmern. Verwende die Umgebungs-Variable REQUEST_URI innerhalb index.php, in dieser Var steht genau das, was der Besucher angefordert hat. Falls Du in obenstehender Regel den Klammerausdruck brauchst, den findest Du in $1 innerhalb der RewriteRule (.htaccess).

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. ok,

          »» und selbst wenn die eingabe http://example.com/b/l/a/h/b/l/u/b.htm lautet soll index.php aufgerufen werden.

          RewriteRule ^(.*).html$ /index.php

          Genau da bin ich auch "hängen" geblieben.
          RewriteRule ^(.*).htm$ index.php

          Also ich dachte ja zunächste RewriteBase wäre mein Freund indem ich ihm sage "alles ab da aufrufen" o.ä.

          Siggy

          1. Besser gesagt: Ich dachte dafür wäre ModRewrite gedacht!