Mod_Rewrite - Wo liegt der Fehler?
Klaus
- webserver
0 Felix Riesterer
0 Klaus
0 dedlfix
0 Klaus0 ChrisB
Hallo!
Ich beschäftige mich gerade zum ersten Mal mit Mod_Rewrite.
Ich habe auf meinem Server im Unterverzeichnis "/test" zwei Dateien.
Eine inhaltsleere index.php und eine .htaccess-Datei mit folgendem Inhalt:
RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+).html$ /index.php?kategorie=$1&seite=$2
Wenn ich nun den Auruf "/test/hallo/welt.html" mache, sollte der Server zwar dies in der Adressleiste anzeigen, im Hintergrund allerdings "index.php?kategorie=hallo&seite=welt" aufrufen.
Was in meinem Fall allerdings passiert ist, dass ein Error 404 ausgelöst wird.
Wo liegt der Fehler?
Viele Grüße
Klaus
Lieber Klaus,
im Unterverzeichnis "/test" zwei Dateien.
Eine inhaltsleere index.php und eine .htaccess-Datei
also sieht es so aus:
[document root]
|
+-- test
|
+-- .htaccess
+-- index.php
Document Root enthält nix. Auch keine index.php oder sonstige Datei. Es enthält lediglich ein Unterverzeichnis "test", stimmt's?
RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+).html$ /index.php?kategorie=$1&seite=$2"/test/hallo/welt.html"
führt zu "/index.php?kategorie=hallo&seite=welt", will also im Document Root eine Datei namens index.php (mit zwei Parametern) aufrufen...
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo,
danke schonmal für die Antwort.
also sieht es so aus:
[document root]
|
+-- test
|
+-- .htaccess
+-- index.php
So sieht es aus.
Document Root enthält nix. Auch keine index.php oder sonstige Datei. Es enthält lediglich ein Unterverzeichnis "test", stimmt's?
Nein. Im übergeordneten Verzeichnis befinden sich ebenfalls Datein, unter anderem eine index.php.
führt zu "/index.php?kategorie=hallo&seite=welt", will also im Document Root eine Datei namens index.php (mit zwei Parametern) aufrufen...
Hier gilt also _nicht_ der Pfad, von der .htaccess aus?
Viele Grüße
Klaus
Hallo Klaus,
führt zu "/index.php?kategorie=hallo&seite=welt", will also im Document Root eine Datei namens index.php (mit zwei Parametern) aufrufen...
Hier gilt also _nicht_ der Pfad, von der .htaccess aus?
äh, doch schon ... aber du adressierst ja mit dem vorangestellten "/" ausdrücklich vom Document Root aus.
So long,
Martin
echo $begrüßung;
RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+).html$ /index.php?kategorie=$1&seite=$2Wenn ich nun den Auruf "/test/hallo/welt.html" mache, sollte der Server zwar dies in der Adressleiste anzeigen, im Hintergrund allerdings "index.php?kategorie=hallo&seite=welt" aufrufen.
Was in meinem Fall allerdings passiert ist, dass ein Error 404 ausgelöst wird.
Wo liegt der Fehler?
Er ruft nicht index.php auf sondern /index.php, so wie du es ihm gesagt hast. Vermutlich gibt es keine /index.php, deswegen der 404.
Wenn du nun einfach den / rausmachst, kommst du in eine Endlosschleife, da RewriteRule in einer Per-Verzeichnis-Konfiguration einen neuen internen Request auslöst, der seinerseite wieder die Regeln des Verzeichnisses beachtet. Schließe durch zwei RewriteCond-Anweisungen existierende Dateien und Verzeichnisse vom Umschreiben aus.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
echo "$verabschiedung $name";
Hallo,
danke für die Antwort.
Er ruft nicht index.php auf sondern /index.php, so wie du es ihm gesagt hast. Vermutlich gibt es keine /index.php, deswegen der 404.
Mir ist da ehrlich gesagt im Moment der Unterschied nicht klar.
Wenn du nun einfach den / rausmachst, kommst du in eine Endlosschleife, da RewriteRule in einer Per-Verzeichnis-Konfiguration einen neuen internen Request auslöst, der seinerseite wieder die Regeln des Verzeichnisses beachtet. Schließe durch zwei RewriteCond-Anweisungen existierende Dateien und Verzeichnisse vom Umschreiben aus.
Ich hab die Endlosschleife provoziert, sieht allerdings nicht so aus, als würde es was ändern, wenn ich den "/" rausnehme, weiterhin 404. :(
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
Bringt dann natürlich leider auch nichts...
Viele Grüße
Klaus
Hi,
RewriteEngine On
RewriteRule ^/([a-z]+)/([a-z]+).html$ /index.php?kategorie=$1&seite=$2
Wenn ich nun den Auruf "/test/hallo/welt.html" mache,
^/ matcht den /
Das erste ([a-z]+) matcht 'test'
/ matcht den /
Das zweite ([a-z]+) matcht das 'hallo'
. matcht nicht, da jetzt ein / kommt, kein Punkt.
Die Regel kann also nicht angewendet werden, die URL bleibt unverändert.
cu,
Andreas
Hallo!
Also, wenn ich die .htaccess in das Root-Verzeichnis lege und folgende Angaben mache, funktioniert alles, so wie ich es will:
RewriteEngine On
RewriteRule ^/test/([a-z]+)/([a-z]+).html$ /test/index.php?kategorie=$1&seite=$2
Zugegeben, verwirrt bin ich nachwievor.
Kann mir jemand erklären, warum das jetzt funktioniert und vorhin nicht?
Viele Grüße
Klaus
Hi,
Also, wenn ich die .htaccess in das Root-Verzeichnis lege und folgende Angaben mache, funktioniert alles, so wie ich es will:
RewriteEngine On
RewriteRule ^/test/([a-z]+)/([a-z]+).html$ /test/index.php?kategorie=$1&seite=$2Zugegeben, verwirrt bin ich nachwievor.
Kann mir jemand erklären, warum das jetzt funktioniert und vorhin nicht?
Weil der Slash auf die Domainwurzel verweist.
/test/index.php existiert.
Vorher hast du, zwar aus der .htaccess im Unterverzeichnis test heraus, ebenfalls mit einem Slash beginnend umgeschrieben - /index.php. Eben durch diesen Slash bezieht sich das aber auch wieder auf das Wurzelverzeichnis, du "springst" damit also aus dem Unterverzeichnis heraus ins oberste Verzeichnis.
MfG ChrisB