Sönke Tesch: index.php?section=Impressum ??

Beitrag lesen

Ich hab da mal eine Frage zu PHP und zwar wie kann man sowas erstellen --> index.php?section=Impressum

Bevor Du Dich unglücklich machst: Lass es. Diese Form von Adressen wird von vielen Suchmaschinen nur teilweise oder gar nicht indiziert. Der Grund ist, daß das Fragezeichenanhängsel für Benutzereingaben gedacht ist, so wie es zum Beispiel bei den Abfrageseiten von Suchmaschinen gehandhabt wird. Individuelle Benutzereingaben sind aber für die Allgemeinheit nicht von Interesse, deshalb kümmern sich viele Suchmaschinen nicht um derartige Adressen.

Und nein: Es ist auch nicht c00l ;)

Als einfache Alternative kannst Du $_SERVER["PATH_INFO"] verwenden. In dieser Variable erscheint alles, was hinter dem Skriptnamen, getrennt durch einen Schrägstrich, erscheint. Bei

index.php/impressum

würde also wie gehabt Dein Skript index.php mit $_SERVER["PATH_INFO"]=="/impressum" aufgerufen werden.
Damit hättest Du schonmal das Suchmaschinenproblem beseitigt.

Möchtest Du lieber ganz einfache, schöne Adressen haben, kannst Du folgende Zeilen in eine Datei namens .htaccess eintragen (sofern Du den Apache-Webserver nutzt):

RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_URI} !^index.php.*
  RewriteRule (.*) /index.php/$1

Damit sollte eine Anfrage nach beispielsweise /impressum intern nach /index.php/impressum umgeleitet werden.

Falls es Schwierigkeiten gibt, melde Dich nochmal. Die Beschreibung zu diesen Anweisungen findest Du unter http://httpd.apache.org/docs/mod/mod_rewrite.html.

Dies hab ich schon raus gefunden, nur weiss ich nicht wie/ wo ich das einsetzen soll

switch ($_GET['section']) {
case "impressum":
include("impressum.inc")
break;
[...]
default:
include ("index.inc")
}

In Deiner index.php, wieso? Wo genau ist das Problem?

Noch'n Tipp: Benutze keine Dateien mit dem Server nicht bekannten Dateiendungen. Es ist zugegebenermaßen relativ unwahrscheinlich, aber falls jemand die Adresse "/impressum.inc" aufruft, bekommt er Deinen PHP-Quellcode frei Haus geliefert - bei dieser Datei vielleicht kein Weltuntergang, problematisch wird's, wenn da Passwörter drinstecken oder sonst irgendwelche Dinge, die niemanden etwas angehen.

Benutze besser impressum.inc.php und/oder füge die folgenden Zeilen in die bereits angesprochene Datei namens .htaccess ein:

<filesmatch ".inc(.php)?$">
  deny from all
  </filesmatch>

Damit wird die Auslieferung von Dateien, die auf .inc oder .inc.php enden, vollständig unterbunden (hat wohlgemerkt keine Auswirkungen auf PHPs include()-Anweisung).

Gruß,
  soenk.e