rewriterule rewritecond redireccionar para ocultar index htaccess enmascarar carpeta cambiar apache .htaccess mod-rewrite

apache - rewritecond - .htaccess directivas para*no*redirigir ciertas URL



rewritecond htaccess (3)

En una aplicación que se basa en .htaccess RewriteRules para sus PrettyURLs (CakePHP en mi caso), ¿cómo configuro correctamente las directivas para excluir ciertos directorios de esta reescritura? Es decir:

/appRoot/.htaccess app/ static/

Por defecto, cada solicitud a /appRoot/* se está reescribiendo para ser recogida por la app/webroot/index.php , donde se está analizando y se están invocando las correspondientes acciones del controlador. Esto se hace mediante estas directivas en .htaccess :

RewriteBase /appRoot RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L]

Ahora quiero excluir algunos directorios como static / de esta reescritura. Intenté con esto antes de Cake RewriteRules:

RewriteCond $1 ^(static|otherDir).*$ [NC] RewriteRule (.*) - [L]

Funciona hasta el momento en que las solicitudes ya no se reescriben, pero ahora se omiten todas las solicitudes, incluso las solicitudes legítimas de Cake que no deberían coincidir con ^(static|otherDir).*$ .

Intenté varias variaciones de estas reglas pero no puedo hacer que funcionen de la manera que quiero.


¿No podría aplicar la condición a las siguientes reglas, pero con negación, como en (con algunas variaciones de las mismas, no soy demasiado bueno para recordar las reglas de .htaccess, por lo que las banderas podrían estar equivocadas):

RewriteCond $1 !^(static|otherDir).*$ [NC] RewriteRule ^$ app/webroot/ [L] RewriteCond $1 !^(static|otherDir).*$ [NC] RewriteRule ^$ app/webroot/$1 [L]


Elimine la [L] de las reglas anteriores:

RewriteBase /appRoot RewriteRule ^$ app/webroot/     RewriteRule (.*) app/webroot/$1

[L] significa "Detener el proceso de reescritura aquí y no aplicar más reglas de reescritura".


Y la respuesta correcta es iiii ...

RewriteRule ^(a|bunch|of|old|directories).* - [NC,L] # all other requests will be forwarded to Cake RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L]

Todavía no entiendo por qué el archivo index.php en el directorio raíz se llamó inicialmente incluso con estas directivas en su lugar. Ahora se encuentra en

/appRoot/app/views/pages/home.ctp

y manejado a través de Cake también. Con esto en su lugar ahora, supongo que esto también habría funcionado (versión ligeramente alterada de la sugerencia de Mike, no probada):

RewriteCond $1 !^(a|bunch|of|old|directories).*$ [NC] RewriteRule ^(.*)$ app/webroot/$1 [L]