Lo usual es utilizar una combinación de los dos ejemplos que pusiste.
Yo lo haría así:
index.php Código PHP:
if (isset($_GET['id'])){
$id=$_GET['id'];
}else{
$id="0";
}
switch($id){
case "0":
$contenido="portada.php";
break;
case "1":
$contenido="leer.php";
break;
case...
}
include ("header.php");
include ($contenido);
include ("footer.php");
saludos