Problem mit Rewrite Rules

Apache, Lighttpd, nginx, Cherokee
flywalker
Posts: 32
Joined: 2007-02-14 14:14

Problem mit Rewrite Rules

Post by flywalker » 2008-04-23 09:40

Hallo,

ich habe ein Problem mit den Rewrite Rules.

Zur Zeit habe ich folgendes im Einsatz und es funktioniert auch richtig

Code: Select all

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1


Leider entspricht das nicht ganz meinen Erwartungen.
1. Ich will dass alle Anfragen auf Ressourcen unterhalb eines bestimmten Ordners "web" nicht durch das Rule betroffen werden.
Bei einer Anfrage wie /web/img/nichtvorhanden.jpg muss der Webserver ein 404 liefern und nicht die Anfrage an die index.php weiterleiten
2. Auf der anderen Seite muss bei sämtlichen anderen Ordnern, die zum Beispiel PHP Include Dateien enthalten etc., die Weiterleitung trotzt vorhandensein der Datei stattfinden.
Ich will nicht dass Anfragen in der Form /include/phpclass.php möglich sind

Also habe ich mir überlegt, dass alle Anfragen auf index.php umgeleitet werden, die nicht mit /web beginnen oder index.php im URL haben. Dafür habe ich die RewriteCond durch andere ersetzt.

Code: Select all

RewriteCond %{REQUEST_FILENAME} !^/web
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^(.*)$ index.php/$1


Anscheinend geht es aber so nicht, weil ich jetzt einen Internal Server Error bekomme und im Logfile steht, dass zu viele interne Redirects stattfinden.
Was mache ich falsch?

Vielen Dank!
Gruß
flywalker

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Problem mit Rewrite Rules

Post by Roger Wilco » 2008-04-23 13:02

Du willst REQUEST_URI und nicht REQUEST_FILENAME, siehe http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond.

flywalker
Posts: 32
Joined: 2007-02-14 14:14

Re: Problem mit Rewrite Rules

Post by flywalker » 2008-04-23 15:27

Super vielen Dank. Das läuft jetzt :)
Du hast natürlich Recht, ich habe mich nur verschrieben. Ich habe nicht REQUEST_FILENAME genommen, allerdings auch nicht REQUEST_URI
sondern SCRIPT_URL
was wohl auch falsch ist
Nun läuft es aber, vielen Dank!

flywalker
Posts: 32
Joined: 2007-02-14 14:14

Re: Problem mit Rewrite Rules

Post by flywalker » 2008-04-23 15:41

Ist

Code: Select all

RewriteCond %{REQUEST_FILENAME} !^/index.php

nicht richtiger?

Und was ist wenn ich das in ein unterverzeichnis ablege? SIeht es dann so aus?

Code: Select all

RewriteCond %{REQUEST_FILENAME} !^/dir/web
RewriteCond %{REQUEST_FILENAME} !^/dir/index.php
RewriteRule ^(.*)$ index.php/$1


oder muss ich beim RewriteRule auch das Verzeichnis dazu nehmen? also RewriteRule ^(.*)$ /dir/index.php/$1

Danke und Gruß
flywalker

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Problem mit Rewrite Rules

Post by Roger Wilco » 2008-04-23 15:52

flywalker wrote:Ist

Code: Select all

RewriteCond %{REQUEST_FILENAME} !^/index.php

nicht richtiger?

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond wrote:REQUEST_FILENAME
The full local filesystem path to the file or script matching the request.


flywalker wrote:Und was ist wenn ich das in ein unterverzeichnis ablege? SIeht es dann so aus?

Wie wäre es du matchst einfach auf das Ende der REQUEST_URI und nicht den Anfang?

flywalker
Posts: 32
Joined: 2007-02-14 14:14

Re: Problem mit Rewrite Rules

Post by flywalker » 2008-04-23 16:24

1) sorry hab mich schon wieder verschrieben

das sollte heissen
RewriteCond %{REQUEST_URI} !^/index.php

2)
Wie wäre es du matchst einfach auf das Ende der REQUEST_URI und nicht den Anfang?


geht es in diesem Fall?
Wenn ein Benutzer zum Beispiel /web/dir1/dir2/bla.html eingibt, kann ich das ja nicht vorher wissen
Oder meintest Du nur die RewriteCond für index.php?
Also das:
RewriteCond %{REQUEST_URI} !index.php$

Funktioniert es auch, wenn ein Benutzer get-Variablen oder Pathinfo dran hängt?
Also index.php?var=wert oder ondex.php/test/test/test
?

Danke und Gruß
flywalker

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Problem mit Rewrite Rules

Post by Roger Wilco » 2008-04-23 16:42

flywalker wrote:Oder meintest Du nur die RewriteCond für index.php?

Ja, wobei du dann besser SCRIPT_NAME nimmst (und endlich die Apache Doku liest und dich rudimentär mit regulären Ausdrücken beschäftigst).

flywalker
Posts: 32
Joined: 2007-02-14 14:14

Re: Problem mit Rewrite Rules

Post by flywalker » 2008-04-23 17:22

ich dachte meine Kenntnisse in regulären Ausdrücken sind schon rudimentär ;)
Ausserdem war mir nicht bewußt, dass ich in den regex einen Fehler gemacht habe.
Ich kenne mich halt nicht besonders mit Mod Rewrite aus.
Natürlich hast Du Recht und ich könnte Stunden Tage oder auch Monate mich durch sämtliche Dokus durchlesen und zu einem SuperGuru werden. Leider habe ich nicht die nötige Zeit dazu.
Und ich dachte dafür existieren auch solche Foren, in dem man von dem Expertenwissen (falls diese Experten bereit sind, ihr Wissen zu teilen natürlich :) ) profitiert und so schneller an die Lösung kommt. Ein Lerneffekt gibt es auch hierbei.
Wenn alle sich in allen Themen und Fachgebieten auskennen würden und sätliche Dokus und RFCs durchlesen, haben solche Foren keine Daseinsberechtigung mehr.
Zum Glück ist es nicht so. Also danke ich Dir für Deine Hilfe!!

Übrigens RewriteCond %{SCRIPT_NAME} !index.php$ produziert ebenfalls einen Server Error (zu viele interne Weiterleitungen)

ich habe jetzt dank Deiner Hilfe diese Lösung und sie funktioniert

Code: Select all

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/web
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^(.*)$ index.php/$1


Danke und Gruß
flywalker

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Problem mit Rewrite Rules

Post by Roger Wilco » 2008-04-23 17:31

flywalker wrote:Natürlich hast Du Recht und ich könnte Stunden Tage oder auch Monate mich durch sämtliche Dokus durchlesen und zu einem SuperGuru werden. Leider habe ich nicht die nötige Zeit dazu.

Du sollst auch nicht alles lesen, sondern die Dokumentation zu mod_rewrite.