Puoi fare entrambe le cose.
La seconda parte riguarda esclusivamente apache (quindi configurazione di apache oppure file .htaccess)
La prima invece è mista: in parte è su apache e in parte nella tua implementazione php.
Per quest'ultima, il modo più usato è implementare il pattern front controller e un sistema di routing, in modo da disaccoppiare la gestione degli url dal codice.
Se non l'hai mai fatto, puoi trovare un'ottima implementazione in Symfony