¿Cómo qué no?
Eso significa hacer redirección, sencillamente mandas al usuario hacia otra URL.
Qué la tomes de la BD es otra cosa, el objetivo detrás de los url-shorteners es hacer redirecciones.
Lo que te han dicho es que para depurar debes quitar la redirección header('Location: ...') en en lugar de eso imprimas lo que obtienes de la BD.
Un loop infinito es obvio y auto-descriptivo, haces una redirección hacia el mismo lugar como origen y destino. El hecho de que hagas la redirección con header() no nos dice nada, la url que obtienes de la BD puede que sea otra y tu ni te enteras (lo dudo).
Vamos a decir que no hay misterio ni magia negra detrás de tu problema, si no eres capaz de depurar tu propio çódigo nosotros menos, de lejos y sin más información, nada.
¿Te has puesto a pensar qué tal vez tu problema sea el .htaccess y no tanto el código PHP?
Digo, el código es tan simple que sería muy torpe que no funcione.
Si lo piensas, la expresión regular que manejas para mod_rewrite también deja pasar "index" y seguramente termina sucediendo esto:
Y de ahí el loop.
No sé, sólo divago, si yo fuera tu ya hubiera depurado todo y revisado con Firebug/Live HTTP Headers lo que ocurre con las cabeceras, o de plano los logs de error de Apache, etc.