mod_rewrite
Siggy
- webserver
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
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
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
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
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
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
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
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
Besser gesagt: Ich dachte dafür wäre ModRewrite gedacht!