1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

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

Dieses Thema im Forum "PHP & Co." wurde erstellt von Pechente, 16.10.09.

  1. Pechente

    Pechente Spartan

    Dabei seit:
    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 ;)
     
  2. creative7even

    creative7even Jerseymac

    Dabei seit:
    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.
     
    Pechente gefällt das.

Diese Seite empfehlen