2008-08-06 22 views
18

En una aplicación que se basa principalmente 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:.htaccess directivas para * no * redirigir ciertas URL

/appRoot/.htaccess 
     app/ 
     static/ 

Por defecto está siendo reescrito cada petición a /appRoot/* para ser recogidos por app/webroot/index.php, donde está siendo analizada y las correspondientes acciones del controlador se invoca. Esto se hace por estas directivas en .htaccess:

RewriteBase /appRoot 

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

ahora quiero excluir algunos directorios como estática/de esta reescritura. Probé con este antes los RewriteRules pastel:

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

Funciona en la medida en que las solicitudes ya reescrito no están, pero son saltadas ahora todos peticiones, incluso con necesidades Cake legítimos que no deben coincidir con ^(static|otherDir).*$.

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

Respuesta

6

Y la respuesta correcta iiiiis ...

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 directrices en su lugar. Ahora se encuentra en

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

y se maneja 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] 
1

Retire la [L] a partir de las reglas anteriores:

RewriteBase /appRoot 

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

[L] significa "detener el proceso de volver a escribir aquí y no se aplican las reglas de reescritura más."

1

es posible que no se aplican las condiciones a las siguientes reglas, pero con la negación, como en (con alguna variación del mismo, no soy muy buena para recordar reglas .htaccess, por lo que las banderas que podría estar equivocado):

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

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