Andreas: .htaccess Problem

Hallo!

Mein Ziel ist es das man immer den Dateinamen ohne Endung verwendet, also z.B. "uebersicht" eingibt, der Server aber uebersicht.php ausliefert. Das klappte bisher auch prima, halt mit Options +MultiViews, und jetzt wollte ich halt noch verhindern, dass die Leute die php-Dateien direkt aufrufen können, und am besten einen 404 ausgeben, als seien die nicht vorhanden. Aber leider greife ich ja wegen MultiViews immer auf die php-Dateien zu und erzeuge damit immer einen 404. Hat jemand ne Idee wie ich das noch verhindern könnte?

Options +MultiViews
DirectoryIndex uebersicht

RewriteEngine On
RewriteRule ^(.*).php [G]

ErrorDocument 404 /errordocs/404.htm

Viele Grüße
Andreas

  1. Moin,

    dreh den Spiss um und leite ALLE Dateien an einen PHP Script:

    (MultiViews raus)

    RewriteEngine On
    ErrorDocument 404 /seitengucker.php?file=

    Möglichkeit:
    Seitengucker bekommt jetzt alle 404, weil natürlich keine "/uebersicht." Datei da ist. Über $file und REQUEST_URI kann sich seitengucker.php die tatsächliche angeforderte Seite/URL zusammenbasteln/prüfen und dann einen Redirekt bauen, z.B.:
    Header("Location:$file.php\n");

    Vorteil: seitengucker.php kann gleichzeitig als Masterbrain "echte" 404 abfangen und ggf. Alternativen anbieten. Wie sich das für einen 404 Seite auchgehört <g>

    Nachteil: jede(!) andere PHP Datei, die direkt aufgerufen wurde muss zunächst prüfen ob die denn per Redirect gestartet wurde oder nicht, dabei behilflich sein kann ein vergleich zwischen $SCRIPT_NAME, $PHP_SELF und $REQUEST_URI (sollten abweichen).
    Ein allgemeiner include("tester.inc") in jeder PHP-Datei sollte da helfen und ggf. das ALden abbrechen bzw. einen (Fake) "Seite gibtz nicht" ausgeben.

    Ist alles etwas von hinten-durch-die-brust-ins-auge was du da vorhast, sollte aber so klappern.

    Viel Spaß
    CirTap

    1. Hi!

      dreh den Spiss um und leite ALLE Dateien an einen PHP Script:

      (MultiViews raus)

      Hm, gerade das wollte ich eigentlich behalten, da ich bei rewrite alleine Probleme mit Parametern... bekommen werde. Und ch weiß auch nicht ob rewrite nicht evtl. viel langsamer ist ?!

      Aber ich mag einen anderen Teil der Idee, nämlich  in die Scripte einfach ein Prüfung einbauen ob .php im Request URI vorkommt, oder kommt das immer vor wenn per multiview halt auf eine .php "umgeleitet" wird?

      Da ich aber ungern in jede Datei eingreife, habe ich noch eine IDee gehabt: Ich gebe den PHP Dateien einfach eine eigene Endung und schicke diese durch den Parser, sowas wie .xphp:

      AddType application/x-httpd-php .xphp

      Naja, am liebsten wäre mir aber immer noch die erste Lösung, gibt es tatsächlich keine Möglichkeit das ich  MultiViews  mit einer RewriteRule ...[G] verbinde? Warum soll das nicht gehen? Liegt es vielleicht einfach nur an der Reihenfolge? Ich habe alles erdenkliche probiert, aber es will nicht klappen.

      Vielen Dank jedenfalls,

      Grüße
      Andreas