.htaccess directivas para * no * redirigir ciertas URL

votos
19

En una aplicación que depende mucho de .htaccessRewriteRules 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/

De forma predeterminada, cada solicitud /appRoot/*se reescribe para que la recoja app/webroot/index.php, donde se analice y se invoquen las acciones de controlador correspondientes. 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 ^(static|otherDir).*$.

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

Publicado el 06/08/2008 a las 09:15
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
6

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]
Respondida el 07/08/2008 a las 07:09
fuente por usuario

votos
1

¿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]
Respondida el 06/08/2008 a las 09:26
fuente por usuario

votos
1

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".

Respondida el 06/08/2008 a las 09:19
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more