.htaccess Problem
Andreas
- webserver
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
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
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