Pregunta

En una aplicación que depende en gran medida de .htaccess RewriteRules para sus PrettyURL (CakePHP en mi caso), ¿cómo configuro correctamente directivas para excluir ciertos directorios de esta reescritura?Eso es:

/appRoot/.htaccess
         app/
         static/

Por defecto, cada solicitud a /appRoot/* está siendo reescrito para ser recogido por app/webroot/index.php, donde se analiza y se invocan las acciones correspondientes 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.lo intenté con esto antes las reglas de reescritura del pastel:

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

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

Probé varias variaciones de estas reglas pero no logro que funcione como quiero.

¿Fue útil?

Solución

Y la respuesta correcta iiiis...

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é se llamó inicialmente al archivo index.php en el directorio raíz incluso con estas directivas implementadas.Ahora se encuentra en

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

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

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

Otros consejos

¿No podrías aplicar la condición a las siguientes reglas, pero con negación, como en (con alguna variación de las mismas, no soy muy bueno recordando 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]

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top