Un forma simple de hacer lo que pretendes es simplemente armar tu página bajo un frame-set, donde el frame superior tendría un ancho de 1 % .. y el inferior el 99% restante.
Suponiendo que tienes armado ya el frame-set que te menciono .. donde llamas a tu página del frame inferior .. usas tu variable que recojes del URL:
Código:
<FRAME src="<? echo $_GET['p'].".html" ?>">
(Asumo que todas son .html .. por eso concateno con ".html" ...)
Ese "frame-set" lo llamarías index.php para poder llamarlo con un URL como el que mencionas:
http://www.tal.tal/?p=pagina
Esta solución igualmente no "oculta" 100% el URL destino .. se puede ver fácilmente viendo las propiedades de la página (desde tu navegador) ..y deja rastros en proxys y demás historiales.
Otra solución más efectiva es que tu scritp PHP "index.php" llame a tu página tipo:
Código PHP:
<?
readfile($_GET['p'].".html");
?>
De esa forma se lee de la ubicación física tu página (por ruta absoluta) y se entrega al buffer de salida de PHP formando parte todo del código del script que lo llame: index.php .. Si los archivos los hubicas fuera del "document root" de tu servidor, quedarían totalmente fuera del alcanze de una llamada por el URL (http:// .....) .. Ojo si usas imagenes u otros archivos que vincules en esa misma página, tendrás que usar una técnica similar para llamarlas.
Un saludo,