Eu gerencio um grande número de aplicações PHP usando o front controller e o seguinte arquivo htaccess:
FallbackResource /index.php
Sim, esse é o arquivo inteiro (para cada aplicativo)!
No entanto, alguns dos sites estão em subpastas, sendo necessária a seguinte alteração:
FallbackResource /subfolder/index.php
Como você provavelmente poderia imaginar, o /
no começo significa que o caminho é relativo ao site / vhost, e aqui o caminho precisa ser relativo ao diretório.
(Se eu estivesse usando mod_rewrite
para isso em vez de mod_dir
, eu teria que adicionar um RewriteBase
para cada subdiretório conforme necessário, de maneira semelhante.)
Eu pensei que eu poderia contornar isso fazendo:
FallbackResource index.php # No slash!
No entanto, quando as reescritas do site contêm barras, por exemplo, se o aplicativo for /store/
e o caminho dentro dele for products/1234
, o Apache procurará /store/products/index.php
em vez de /store/index.php
e retornará 500 com o seguinte mensagem no log:
Request exceeded the limit of 10 subrequest nesting levels due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
Eu teria pensado que o caminho FallbackResource
é relativo ao arquivo .htaccess no qual ele está configurado, mas parece que é realmente relativo ao URL solicitado.
Existe uma maneira de ter FallbackResource
agindo da maneira que eu esperava?
Eu posso usá-lo do jeito que está se essa é a resposta, mas seria muito mais fácil gerenciar os sites que eu tenho se isso puder ser feito. Os sites usam o mesmo código básico com diferentes temas e conexões de banco de dados, e a maneira como funciona agora eu tenho que modificar o arquivo htaccess toda vez que eu implantar uma nova versão do código (porque ele está marcado no Git). Se pudermos fazer com que alguém não precise se lembrar de fazer essa modificação toda vez, isso seria realmente ótimo.