Diretivas .htaccess para *não* redirecionar determinados URLs
-
08-06-2019 - |
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.
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."