Intercetta la richiesta HTTP utilizzando l'elemento 'REQUEST_URI' di $ _SERVER. Questo restituisce (credo) solo la pagina richiesta, non l'intero URI/URL - maggiori informazioni here. Una volta che hai afferrato la richiesta della pagina, sostituisci l'indirizzo del file reale che è necessario. Ad esempio, l'utente-friendly www.somewebsite.com/page01 diventa una richiesta per i più goffo suono www.somewebsite.com?page01.php. Questo metodo non creerà una directory virtuale, in quanto tale, ma dovrebbe funzionare correttamente. Ho usato un metodo simile sul mio IT website, in cui ogni pagina viene caricata tramite index.php, consentendo a quel file di tenere un registro dei visitatori in tempo reale (il sito ha Webalizer, che funziona un giorno o giù di lì in modo arretrato).
Riscrivere il nome del file potrebbe funzionare, anche se non è per il mio gusto personale. L'uso di PHP per effettuare un URI/URL-swap potrebbe probabilmente portare il beneficio di una minore richiesta del server, a causa del minor tempo di lettura/scrittura del disco rispetto alla riscrittura del nome file.
Spero che questo aiuti.
Dai un'occhiata ad es. [Silex] (http://silex.sensiolabs.org/) o [Symfony Routing Component] (http://symfony.com/doc/current/components/routing/introduction.html). Meglio usare componenti ben collaudate piuttosto che rotolare le tue cose. – nietonfir