• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Per .htaccess verhindern, dass Unterverzeichnis einzelner Datei vorgezogen wird?

Pechente

Spartan
Registriert
29.10.08
Beiträge
1.606
Hallo,

ich hab per .htaccess mit folgendem Code erreicht, dass eine /datei.php auch per /datei (ohne Dateiendung) aufgerufen werden kann.

Code:
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

Das funktioniert so weit auch ganz gut. Wenn ich allerdings ein Verzeichnis /datei/ im gleichen übergeordneten Verzeichnis erstelle, zieht der Server bei der Eingabe von http://domain.tld/datei in jedem Fall das Verzeichnis der Datei vor, wodurch es keine Möglichkeit mehr gibt die Datei datei.php ohne Dateiendung zu erreichen.

Nun habe ich folgenden Code gefunden, der das Problem beheben soll:

Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteCond %1 -U
RewriteRule ^(.*)$ %1 [L,R]

Aus irgendeinem Grund funktioniert dieser Code jedoch nicht. Es kommt zwar keine Fehlermeldung, aber die Wirkung ist gleich Null.

Kennt jemand vielleicht eine Möglichkeit, dass der Server bei der Eingabe von http://domain.tld/datei auch wirklich die Datei aufruft und nicht das Unterverzeichnis? Habs schon in zwei anderen Foren versucht, relativ erfolglos, obwohl das Problem recht dringend ist. Vielen Dank ;)
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
Grundsätzlich ist das Verwirren des Webservers nicht unbedingt zu empfehlen...

Folgende Rewrite-Direktiven sollten Dein Problem lösen:
Code:
RewriteCond %{REQUEST_URI} ^(.*)/$
RewriteCond %{DOCUMENT_ROOT}%1.php -f
RewriteRule ^(.*)/$ $1.php [L]

Angenommen http://yourdomain.tld/foo/bar/baz/ wird vom Server angefordert (Achtung bei den Slashes):
  • Zeile 1: die REQUEST_URI (foo/bar/baz/) wird vom Indianer anhand der Regular-Expression überprüft und in 2 Teile zerlegt:
    • ^(.*) = /foo/bar/baz -> entspricht dem ersten Teil
    • /$ = / -> der letzte Slash, entspricht dem 2ten Teil
  • Zeile 2: der erste Teil (=%1) wird um die Dateiendung .php erweitert und mit dem DocumentRoot (in diesem Bsp: /var/www) des Servers auf eine existierende Datei (-f) überprüft -> /var/www/foo/bar/baz.php
    Existiert die Datei so wird mit Zeile 3 fortgefahren - im negativen Fall wird an dieser Stelle abgebrochen.
  • Zeile 3:: existiert die Datei aus Zeile 2, so wird diese umgeschrieben - siehe RegEx aus Zeile 1. Der Server liefert die Datei /var/www/foo/bar/baz.php aus.
 
  • Like
Reaktionen: Pechente