Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/01/2012, 12:28
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Regla para una condición, pero no para otra, en .htaccess

@Jamati

En primer lugar las regla que ponés
Código Apache:
Ver original
  1. RewriteRule ^(.*)/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 original
  1. RewriteRule ^(.*)/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 original
  1. Options +Indexes +FollowSymLinks
  2. RewriteEngine On
  3. # con los siguientes rewriteCond decimos que si la url llamada
  4. # no es
  5. RewriteCond %{REQUEST_URI} !^/carpeta3/index\.htm$
  6. # ni tampoco es
  7. RewriteCond %{REQUEST_URI} !^/carpeta3/carpeta4/index\.htm$
  8. # Ejecute la redirección (con la corrección que indiqué al inicio)
  9. 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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
  2. Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. </head>
  7. <a href="/carpeta1/index.htm">/carpeta1/index.htm</a><br />
  8. <a href="/carpeta2/index.htm">/carpeta2/index.htm</a><br />
  9. <a href="/carpeta3/index.htm">/carpeta3/index.htm</a><br />
  10. <a href="/carpeta3/carpeta4/index.htm">/carpeta3/carpeta4/index.htm</a><br />
  11. </body>
  12. </html>

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
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.