A ver.
Código Apache:
Ver originalOptions +FollowSymLinks -Indexes
RewriteEngine on
RewriteRule ^descarga/(.*)$ /index2.php?sub=$1 [L]
para simplificar, me ahorré lo del base y asumo que todo parte desde la raíz no de la carpeta "ejemplo", y puse index2.php para no añterar mi propio index en las pruebas. Como se observa, no usé "descargas" como prefijo, sino "descarga", lo podés invertir si querés
nuestro index2.php
Código PHP:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>titulo php</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<p>
<a href="/descarga/fuentes">fuentes</a> |
<a href="/descarga/utilidades">utilidades</a> |
<a href="/descarga/mp3">mp3</a>
</p>
<?php
if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/descargas/' . $_GET['sub'] . '.php')){ include_once('descargas/' . $_GET['sub'] . '.php');
}else{
echo "no existe";
}
}else{
echo "no existee";
}
?>
</body>
</html>
los mensajes de no existe (mp3 en el ejemplo, pensá que alguien quiera manipular la url desde la barra de direcciones) se personalizan ó incluso que haga include a otro archivo x defecto. Es decir tus links se construyen con
<a href="/
descarga/fuentes">fuentes</a>
no con
descargas.
como descargas, según la estructura que mostraste es comun a todas las subs, no hace falta pasarla en la query como parámetro
Saludos