Interceptar la solicitud HTTP utilizando el elemento 'REQUEST_URI' de $ _SERVER. Esto devuelve (creo) solo la página solicitada, no toda la URI/URL - más información here. Una vez que haya elegido la solicitud de página, sustituya la dirección del archivo real que se necesita. Por ejemplo, el fácil de usar www.somewebsite.com/page01 se convierte en una solicitud para el más torpe que suenan www.somewebsite.com?page01.php. Este método no creará un directorio virtual, como tal, pero debería funcionar bien. He usado un método similar por mi cuenta IT website, donde cada página se carga a través de index.php, lo que permite que ese archivo mantenga un registro de visitantes en tiempo real (el sitio tiene Webalizer, que tiene un día más o menos).
Volver a escribir el nombre del archivo podría funcionar, aunque no es para mi gusto personal. El uso de PHP para efectuar un URI/URL-swap probablemente conllevaría el beneficio de una menor demanda del servidor, ya que requeriría menos tiempo de lectura/escritura del disco que la reescritura del nombre del archivo.
Espero que ayude.
Eche un vistazo a, p. [Silex] (http://silex.sensiolabs.org/) o [Componente de enrutamiento de Symfony] (http://symfony.com/doc/current/components/routing/introduction.html). Es mejor usar componentes bien probados que hacer rodar tus propias cosas. – nietonfir