1- El htaccess hace que todas las peticiones URL vayan a un mismo fichero, por ejemplo, request.php.
2-Request.php debe ser capaz de trocear la url que le llega, dato que conoce mirando $SERVER["REQUEST_URI"], para llamar o incluir al PHP que ejecute la acción real que monte la página. Y lo hace por ejemplo usando una clase enrutadora, típicamente llamada "Router.php"
3- Router PHP tiene un mapeo de todo tu sitio web, es decir, sabe procesar cualquier url que le llegue para "enrutarla" al fichero PHP final. En MVC, por ejemplo, el enrutador sirve para saber a qué controlador, y a qué método del controlador, debe llamar cada posible URL que el cliente escriba. Como la URL tiene partes "dinámicas", es decir, el nombre del artículo (es imposible mapear todos los artículos inididualmente) hay que programar un enrutador que tenga en cuenta de que partes de la URL pueden ser dinámicas.
Aquí pongo un mini ejemplo de cómo empecé un Router.php para mi propio ligth-framework MVC.
http://www.forosdelweb.com/f18/urls-...8/#post4580634
Quizás algún día muy lejano lo publique xd.