directivas .htaccess para * não * redirecionar determinadas URLs

votos
19

Em um aplicativo que depende fortemente de .htaccessRewriteRules por suas PrettyURLs (CakePHP no meu caso), como faço para configurar corretamente directivas para excluir certos diretórios deste reescrita? Isso é:

/appRoot/.htaccess
         app/
         static/

Por padrão cada pedido de /appRoot/*está sendo reescrito para ser captado por app/webroot/index.php, onde está sendo analisado e ações do controlador correspondentes estão sendo invocado. Isso é feito por estas directivas em .htaccess:

RewriteBase /appRoot

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

Agora eu quero excluir alguns diretórios como static / a partir deste reescrita. Eu tentei com este antes de os RewriteRules bolo:

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

Ele funciona na medida em que os pedidos não reescrito são, mas agora todos os pedidos estão a ser ignorados, mesmo os pedidos bolo legítimos que não devem corresponder ^(static|otherDir).*$.

Eu tentei diversas variações destas regras, mas não pode fazê-lo funcionar da maneira que eu quero.

Publicado 06/08/2008 em 09:15
fonte usuário
Em outras línguas...                            


3 respostas

votos
6

E a resposta correta 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]

Eu ainda não entendo por que o arquivo index.php no diretório raiz foi chamado inicialmente mesmo com essas directivas no lugar. Ele agora está localizado na

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

e tratadas por meio do bolo, bem. Com este no lugar agora, acho que isso teria funcionado tão bem (versão ligeiramente alterada da sugestão de Mike, não testado):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
Respondeu 07/08/2008 em 07:09
fonte usuário

votos
1

você não poderia aplicar a condição com as seguintes regras, mas com a negação, como em (com alguma variação do mesmo, eu não sou muito bom em lembrar regras .htaccess, então as bandeiras pode estar errado):

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

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
Respondeu 06/08/2008 em 09:26
fonte usuário

votos
1

Remova o [L] das regras anteriores:

RewriteBase /appRoot

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

[L] significa "Pare o processo de reescrita aqui e não aplicar quaisquer regras mais reescrita."

Respondeu 06/08/2008 em 09:19
fonte usuário

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