@Jamati
En primer lugar las regla que ponés
Código Apache:
Ver originalRewriteRule ^(.*)/index.htm$ /carpeta/index.htm [L]
y decis que te funciona, no debería funcionar, ya que te crearía un loop y produciría un error 500, si te está funcionando, no sé que otra configuración deba estar afectando. analizala
La regla dice que:
cualquier cosa --> (.*)
seguida de /index.htm
debe redirigirte a --> /carpeta/index.htm,
ahora pensá
/carpeta/index.htm
cumple la condición?
SI, entonces volvería a redirigirte y asi indefinidamente.
Una regla correcta sería
Código Apache:
Ver originalRewriteRule ^(.*)/index.htm$ /carpeta/index.html [L]
porque como se aprecia el destino es .html, no .htm (se podría hacer al reves, poner .html en la expresión y dejar .htm en destino)
Concretamente por lo que preguntás debería ser asi
Código Apache:
Ver originalOptions +Indexes +FollowSymLinks
RewriteEngine On
# con los siguientes rewriteCond decimos que si la url llamada
# no es
RewriteCond %{REQUEST_URI} !^/carpeta3/index\.htm$
# ni tampoco es
RewriteCond %{REQUEST_URI} !^/carpeta3/carpeta4/index\.htm$
# Ejecute la redirección (con la corrección que indiqué al inicio)
RewriteRule ^(.*)/index.htm$ /carpeta/index.html [L]
Parala verificación, deberías tener creada en tu raiz, la carpeta y el archivo de destino
/carpeta/index.html
y el html con los vinculos seria
Código HTML:
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"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <a href="/carpeta1/index.htm">/carpeta1/index.htm
</a><br /> <a href="/carpeta2/index.htm">/carpeta2/index.htm
</a><br /> <a href="/carpeta3/index.htm">/carpeta3/index.htm
</a><br /> <a href="/carpeta3/carpeta4/index.htm">/carpeta3/carpeta4/index.htm
</a><br />
Ese ejemplo es muy puntual, adaptarlo al conjunto de toda tu aplicación, no necesariamente tiene que funcionar. Si supieses de antemano que links hay que ignorar, probablemente funcione, pero si los links a ignorar se generan aleatoriamente a partir de una BD, no, ya que no estarían definidos en el .htaccess
Cuando contesto este tipo de posts en Apache, siempre insisto en que se debe de tener muy en claro que se quiere conseguir y como debe de trabajar
todo en su conjunto. Muchas veces usar modRewrite no es la mejor alternativa o la solución más simple.
Algo que funcione parcialmente puede que falle al aplicarse al todo
Saludos