.htaccess Problem: test/ => test.php
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
apache
aufrufen
ausdruck
code
dank
datei
endung
folgendes versuchen
glauben
index
machen
minute
nehmen
problem
server
suchen
test
update
url
verzeichnis
-
Hi,
ich habe folgendes in der .htaccess stehen:
RewriteEngine on RewriteRule ^(.*)/$ index.php?site=$1
Im Verzeichnis befindet sich eine Datei namens test.php.
Wenn man jetzt in der Adresszeile "test/" eingibt, ist $1 nicht "test", sondern "test.php". Wenn man aber "test1/" eingibt, ist $1 = "test1.
Wieso passiert das und wie kann man dies lösen?
Danke schonmal für die Hilfe!
Beitrag zuletzt geändert: 18.3.2012 17:50:53 von silecom -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
silecom schrieb:
Wenn man jetzt in der Adresszeile "test/" eingibt, ist $1 nicht "test", sondern "test.php". Wenn man aber "test1/" eingibt, ist $1 = "test1.
Wieso passiert das und wie kann man dies lösen?
RewriteEngine on RewriteRule ^(.*).php$ index.php?site=$1
-
silecom schrieb:
Ich hätte gerne dass man die Seite so aufrufen kann: example.com/test/, also ohne .php Endung. Das Problem ist aber wie gesagt, dass der Apache automatisch nach einer Datei namens test.php im Verzeichnis sucht und dies dann für den regulären Ausdruck einsetzt - ist das möglich?
Klar:
RewriteEngine on RewriteRule ^(.*)/$ $1.php
Macht aus example.com/test/ => example.com/test.php
-
Das Problem ist, dass der Server mir "test" automatisch zu "test.php" macht, weil er die Datei im Verzeichnis findet bzw. die Datei existiert. Wenn ich "test1" schreibe, findet er sie nicht und schreibt deshalb auch "test1".
Ich möchte nun aber, dass auch bei "test" nur "test" als Wert verwendet wird. -
Bei "test" zeigt er mir die test.php an => falsch.
Bei "test1" zeigt er mir, wie es auch sein soll, die index.php mit site=test1 an. -
silecom schrieb:
Bei "test" zeigt er mir die test.php an => falsch.
Bei "test1" zeigt er mir, wie es auch sein soll, die index.php mit site=test1 an.
RewriteRule ^(.*)/$ index.php?site=$1
Macht aus
/irgendwas/ => index.php?site=irgendwas
Was stimmt daran nicht? Wie möchtest du es genau haben? -
trueweb schrieb:
silecom schrieb:
Bei "test" zeigt er mir die test.php an => falsch.
Bei "test1" zeigt er mir, wie es auch sein soll, die index.php mit site=test1 an.
RewriteRule ^(.*)/$ index.php?site=$1
Macht aus
/irgendwas/ => index.php?site=irgendwas
Was stimmt daran nicht? Wie möchtest du es genau haben?
So habe ich es ja wie in meinem Eingangspost in der .htaccess.
Das Problem ist, dass wenn der Apache die Datei findet -> die Datei existiert -> diese für $1 nimmt und nicht den ursprünglichen Wert in der Adresszeile. -
Hey,
genau hier liegt das Problem, aber als Workaround könnte man auch:
RewriteRule !(index\.php)$ /index.php?query=%{REQUEST_URI}
nehmen und später in PHP das so lösen:
bei einer Seite einfach:
<?php $site = str_replace(array('.php','/'),'',$_GET['query']); ?>
Grüße -
UPDATE:
Man muss MultiViews deaktivieren. Dann funktioniert es wie gewollt :)
Kann geschlossen werden, danke.
Beitrag zuletzt geändert: 18.3.2012 20:46:36 von silecom -
Hallo silecom,
nachdem ich das Thema ganz interessant fand habe ich ein wenig rumgesucht und bin glaube ich fündig geworden.
Das Problem ist wohl, dass das Dateisystem gegenüber Rewrite-Rules vorrangig behandelt wird.
D.h. insbesondere, dass auch Directory-Rules angewendet werde, bevor die Rewrite-Rule an der Reihe ist.
Und es kann sein, dass die MultiView-Option aktiviert ist.
Als mögliche Lösung kannst Du ja mal folgendes versuchen:
Options -MultiViews RewriteEngine on RewriteRule ^(.*)/$ index.php?site=$1
-
Jup, genau so wie du es geschrieben hast, funktioniert es nun auch.
Wir haben quasi in der selben Minute geschrieben :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage