Problem mit mod_rewrite

Alles, was den Apache betrifft, kann hier besprochen werden.

Problem mit mod_rewrite

Postby Lay-C » 31. August 2008 15:05

Guten Tag...

Da ich noch nicht wirklich viel mit Apache und mod_rewrite gemacht habe und irgendwie nicht wirklich damit klar komme habe ich eine Frage.
Meine Seite wird momentan noch über http://localhost/index.php?site=abc aufgerufen.
Ich möchte aber gerne dass man die Seite über http://localhost/abc aufrufen kann.
Meine .htaccess sieht zur Zeit so aus:
Code: Select all
RewriteEngine on
RewriteRule /(.*)/ /index.php?site=$1

Allerdings macht sie nicht das was ich will... hab auch schon andere Varianten ausprobiert aber weiß im Moment nicht weiter...

Ich hoffe ihr könnt mir helfen
Gruß Lay-C

PS: www.modrewrite.de hat mich auch nicht weitergebracht und auf deren Forum kann ich mich - aus welchen Gründen auch immer - nicht anmelden.
Lay-C
 
Posts: 1
Joined: 31. August 2008 14:49

Postby glitzi85 » 03. September 2008 20:37

Hallo,

wichtig in diesem Zusammenhang ist, dass der Server die umgebogene Seite nochmal durch mod_rewrite jagt.

Code: Select all
RewriteRule /(.*)/


diese Rule wird immer angewandt, da du damit beliebig viele Zeichen aller Art abfängst. Logischerweise wird der daraufhin ausgelöst request nach /index.php?site=$1 ebenfalls getroffen. Dieser wird wieder nach /index.php weitergeleitet und so weiter. Perfekte Endlosschleife. Hier eine simple Abhilfe:

Code: Select all
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(index\.php|meta|images)
RewriteRule ^/(.*)$ /index.php?site=$1


Ich hab die Condition jetzt noch ein bisschen erweitert zum besseren Verständnis. Die Rule wird jetzt nur ausgeführt, wenn die Variable REQUEST_URI (=die angeforderte Ressource) nicht mit index.php, meta oder images anfängt. meta und images könnten z.B. Ordner sein in denen du dein CSS und Bilder lagerst. Wenn du diese Ordner oder Dateien nicht mit einbeziehst, werden anfragen danach ebenfalls nach /index.php umgeleitet, was du ja sicherlich nicht willst.

Die Liste kannst du beliebig erweitern, alles was in der Klammer steht wird NICHT umgeleitet. Wenn du z.B. die Datei foo.html auch noch raushaben willst, dann würde es so aussehen:

Code: Select all
RewriteCond %{REQUEST_URI} !^/(index\.php|meta|images|foo\.html)


Punkte musst du mit \ maskieren!

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby gege » 04. September 2008 10:35

hallo glitzi,

danke für deinen code, da ich genau sowas suche wollte ich selbigen eben in meine .htaccess verarbeiten.
doch mein server lässt sich nichts anmerken und verhält sich wie immer.

gebe ich www.meinedomain.de/wurstbrot ein, wird nicht auf eine index.php?site=wurstbrot weitergeleitet sondern ich bekomme ein "Not Found" ;(

Hast du eine Idee was ich mal wieder falsch gemacht habe?!

Vielen Dank schon einmal für deine/eure Hilfe!

...gege
gege
 
Posts: 2
Joined: 04. September 2008 10:26

Postby glitzi85 » 04. September 2008 13:30

Pack mal das hier in deine .htaccess:

Code: Select all
RewriteEngine On
Fehler
RewriteCond %{REQUEST_URI} !^/(index\.php|meta|images)
RewriteRule ^/(.*)$ /index.php?site=$1


Und zwar genau so. Jetzt solltest du beim Aufruf von deiner Domain einen 500er Fehler bekommen, wenn nicht, dann wird die .htaccess gar nicht beachtet.

Dann schau mal in der httpd.conf nach. Dort sollte es eine Direktive geben die da heißt: AllowOverride. Die Angabe dahinter auf All setzen. Pass aber auf, es gibt auch so einen Block:

Code: Select all
<Directory />
   Order allow,deny
   deny from all
   AllowOverride None
</Directory>


Oder zumindest so ähnlich, entscheidend ist das <Directory /> ganz am Anfang. Diesen Block NICHT ändern, der verhindert nämlich dass der Apache frei auf das Dateisystem zugreifen kann. Es sollte einen Directory-Block geben, in dem dein Pfad drinsteht, in diesem dann das AllowOverride ändern.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby gege » 06. September 2008 08:43

nochmal danke, glitzi,

das mit dem "Fehler" habe ich schon getestet, da bekomme ich ne meldung. scheint also an dem allow override zu liegen.
dummerweise habe ich keinen zugriff auf die httpd.conf, da die domain auf nem managed server liegt. ;(

tja, damit muss ich den versuch wohl begraben, oder?!

ciao

..gege
gege
 
Posts: 2
Joined: 04. September 2008 10:26

Postby Wiedmann » 06. September 2008 11:45

scheint also an dem allow override zu liegen.

Zumindest zeigt das jetzt, dass mod_rewrite bei dir freigeschaltet ist.


Code: Select all
RewriteRule /(.*)/ /index.php?site=$1

gebe ich www.meinedomain.de/wurstbrot ein, wird nicht auf eine index.php?site=wurstbrot weitergeleitet sondern ich bekomme ein "Not Found" ;(

In einer ".htaccess" hast du keinen führenden Slash. Und in deiner URI kommt auch kein abschliessender vor. Hier müsste die Regel also so aussehen:
Code: Select all
RewriteEngine on
RewriteRule (.*) /index.php?site=$1
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby glitzi85 » 08. September 2008 12:36

Hallo Wiedmann,

der Fehler ist hierbei aber mir zuzuschieben, schliesslich hab ich die Rules die ich gepostet habe nicht getestet. Hab mal wie so oft das gierige verhalten der RegEx vergessen. Deshalb hab ich da einen Slash in der Rule vorangestellt.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim


Return to Apache

Who is online

Users browsing this forum: No registered users and 342 guests