<?php
$_GET['kap'] = "hom324234";
if( isset( $_GET['kap'] ) ) {
switch ( $_GET['kap'] ) {
case "hom": echo( 'kapitel/kap_home.php' ); break;
case "ba1": echo( 'kapitel/kap_basics1.php' ); break;
case "ba2": echo( 'kapitel/kap_basics2.php' ); break;
default: echo ('Status: 403');
}
}
In meinen Tests funktioniert das Du es wohl erwartest. Weder ist der zusätzliche exit
bei einer Länge von als 3 Zeichen nötig noch wird der default-Zweig ignoriert.
Offenbar liegt die Chose an anderer Stelle. Auch ein Wert wie '/etc/passwd HTTP/1.1' ändert nichts daran, dass der Code funktioniert.
Aber
exit(header('Status: 403', TRUE, 403));
ist Unsinn.
Du willst:
http_response_code( 403 );
echo( 'Status: 403' );
exit;