Pergunta

Em uma aplicação que depende fortemente de .htaccess RewriteRules para seus PrettyURLs (CakePHP no meu caso), como configuro corretamente as diretivas para excluir determinados diretórios dessa reescrita?Aquilo é:

/appRoot/.htaccess
         app/
         static/

Por padrão, toda solicitação para /appRoot/* está sendo reescrito para ser retomado por app/webroot/index.php, onde está sendo analisado e as ações correspondentes do controlador estão sendo invocadas.Isto é feito por estas directivas em .htaccess:

RewriteBase /appRoot

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

Agora quero excluir alguns diretórios como static/ desta reescrita.Eu tentei com isso antes as regras de reescrita do bolo:

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

Funciona na medida em que as solicitações não são mais reescritas, mas agora todos solicitações estão sendo ignoradas, até mesmo solicitações legítimas do Cake que não deveriam corresponder ^(static|otherDir).*$.

Tentei diversas variações dessas regras, mas não consigo fazer funcionar da maneira que desejo.

Foi útil?

Solução

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]

Ainda não entendo por que o arquivo index.php no diretório raiz foi chamado inicialmente, mesmo com essas diretivas em vigor.Agora está localizado em

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

e manipulado através do Cake também.Com isso implementado agora, suponho que também teria funcionado (versão ligeiramente alterada da sugestão de Mike, não testada):

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

Outras dicas

Você não poderia aplicar a condição às regras a seguir, mas com negação, como em (com algumas variações, não sou muito bom em lembrar as regras do .htaccess, então os sinalizadores podem estar errados):

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

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

Remova o [L] das regras anteriores:

RewriteBase /appRoot

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

[L] significa "Interrompa o processo de reescrita aqui e não aplique mais regras de reescrita."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top