Ya vi cuál es el problema de que no te lea bien el .htaccess (según yo).
Mira, tú quieres que:
rutaruta/index/contacto.html
Se reescriba internamente como:
rutaruta/index.php?id=contacto
y para ello usaste el código siguiente:
Código:
RewriteEngine on
RewriteRule ^index/([-_a-zA-Z0-9]+)\.html index.php?id=$1
Que por cierto tiene mucha lógica.
El problema parece estar en el nombre
index. Es como si el Apache no permitiera que exista un directorio llamado INDEX.
Mira, prueba cambiándole el nombre a
indexa o alguna otra cosa y verás que sí funciona la diagonal (
/) para colocar directorios y armar rutas como rutaruta/indexa/contacto.html
Chécalo, ¿curioso, no?
Nota:
Si ya tienes un sitio web armado y en línea, además de que los buscadores ya te han indexado, entonces prueba mejor con el siguiente código:
Código:
RewriteEngine on
RewriteRule ^index/([-_a-zA-Z0-9]+)\.html index.php?id=$1 [R=301,L]
Ese R=301 es para que los buscadores, la siguiente vez que visiten tu sitio, sepan que tienes una redirección permanente a una nueva ruta, que será rutaruta/indexa/contacto.html
Esto es importante por dos cosas, la primera es que buscadores como Google detestan tener sitios duplicados y si no le dices que es una redirección, podría pensar que tienes en tu sitio dos formas de llegar al mismo contenido, ya sea
rutaruta/index.php?id=contacto o bien
rutaruta/indexa/contacto.html y lo que menos queremos es que Google se enoje con nosotros, ¿no?
La segunda razón es porque mencionándole a los Search Engines que tienes una redirección 301, en especial a Google, te transferirá a tu nueva ruta, es decir, a
rutaruta/indexa/contacto.html todo privilegio que te hayas ganado, como tu PageRank por ejemplo.
Ahh, la [L] es para decirle al .htaccess que todas las RewriteRule que se encuentran por debajo de esa, ya no sean leídas (en caso de que tuvieras varias, podría ir o no según te convenga).
Espero funcione, bro.