header() Problem

Hallo zusammen,

folgenden Code ganz am Anfang meiner index.php eingebaut:

[PHP]
if ($_SERVER[„REQUEST_URI“] != „/“): @include(‚inc/content‘.$_SERVER[„REQUEST_URI“].‚.php‘); if (!@include(‚inc/content‘.$_SERVER[„REQUEST_URI“].‚.php‘)): header(„HTTP/1.0 404 Not Found“); include(‚inc/content/404.php‘); endif;
else: include(‚inc/content/home.php‘);
endif;
[/PHP]

Was mache ich da falsch? Der Text für die 404 Seite wird angezeigt, wenn die entsprechende Datei nicht gefunden wird, aber der header() Aufruf gibt einen Fehler…

Danke Euch! :slight_smile:

und welchen Fehler?

Ist es so schwierig, Code ordentlich einzurücken? :???:

Du suchst in etwa das hier:

[php]$page = ‚home‘;

if ($_SERVER[„REQUEST_URI“] != ‚/‘) {
$page = $_SERVER[„REQUEST_URI“];
}

if (file_exists(‚./inc/content/‘ . $page . ‚.php‘)) {
include ‚./inc/content/‘ . $page . ‚.php‘;
} else {
include ‚./inc/content/404.php‘;
}[/php]

An REQUEST_URI können Query-Parameter (index.php?foo=bar) hängen. Auch bin ich gerade nicht völlig sicher, ob das Feld „sicher“ ist oder ob ein Nutzer dort ein „…/“ oder ähnliches reinmogeln könnte.

sowas geht garnicht, achtet ein wenig auf sicherheit !

Auch bin ich gerade nicht völlig sicher, ob das Feld „sicher“ ist oder ob ein Nutzer dort ein „…/“ oder ähnliches reinmogeln könnte.

@freak131: Bei aller Liebe und praktischer Wertschätzung (die ist wirklich vorhanden! :)): Versuch mal, deinen Posts irgendeinen gewinnbringenden Inhalt zu geben.

Edit: Zum Beispiel das hier. Ist jetzt natürlich wieder alles vorgekaut. :?

[php]$whitelist = array(‚contact‘, ‚home‘, ‚guestbook‘, ‚about‘);

$page = ‚404‘;

if ($_SERVER[„REQUEST_URI“] == ‚/‘) {
$page = ‚home‘;
} else {
$test = trim($_SERVER[„REQUEST_URI“], ‚/‘);

if (in_array($test, $whitelist)) {
    $page = $test;
}

}

include ‚./inc/content/‘ . $page . ‚.php‘;[/php]

nachdem ein teil des Pfades fest gecoded ist, sehe ich momentan keine möglichkeit eine seite unterzujubeln. was sollte also unsicher sein.
liegt die seite startend vom stammverzeichnis nicht in inc/content/ und heist home.php gibt es eine 404

http:// sollte noch abgefangen und überprüft werden.

Wie wäre es mit basename()?

basename ist dafür auch nicht gedacht