FallbackResource no subdiretório

6

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.

    
por Moshe Katz 10.04.2014 / 04:43

2 respostas

0

Os sites sobre os quais eu originalmente fiz essa pergunta não estão mais ativos, mas o que acabei fazendo foi o seguinte:

Acabei movendo esses sites para um servidor executando Nginx, onde toda a configuração é feita nos arquivos de configuração do servidor usando uma diretiva try_files . Foi muito mais fácil gerenciar dessa maneira.

    
por 09.10.2016 / 16:05
0

Eu não acho que isso seja possível fazer facilmente. Eu tentei várias combinações de DirectoryMatch e LocationMatch nos principais arquivos de configuração usando a interpolação de variável newish disponível nessas duas diretivas.

Embora algo como FallBackResource index.html seja uma configuração totalmente válida, compartilho a preocupação de Michael Hampton de que qualquer uso de URLs relativas possa causar problemas. No caso de FallBackResource index.html para uma árvore de diretórios específica, index.html deve estar sempre presente, caso contrário, você obterá o loop de recursão descrito para solicitações em que index.html não pode ser encontrado.

No seu caso, você precisaria de um arquivo .htaccess de nível superior com FallBackResource /index.html e, em seguida, FallBackResource /subfoldername/index.html em cada subpasta relevante.

Um script simples para gerar estes é provavelmente o mais seguro.

    
por 09.10.2016 / 11:47