Tome IV: Não, Realmente, é isso!
Acabou sendo mais fácil do que eu pensava em me livrar de [DPI]
. O conjunto final:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ $1_$2 [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php
Agora isso é aceitável? : -)
Tome III: A solução final (não tão)
Ok, depois de muito testes e bater o teclado, eu finalmente encontrei algo satisfatório. Eu definitivamente estou mantendo este caso eu volte ao Apache por algum motivo.
A lâmpada disparou na minha cabeça quando dividi o problema em duas partes: substitua /
por _
; em seguida, adicione .php
no final. Aqui está o que eu finalmente consegui:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ $1_$2 [DPI,N]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php [QSA]
Agora, como mencionei acima, o mais importante foi dividir as duas operações. Depois disso, tudo ficou muito mais fácil. Os dois RewriteCond
s são realmente legais, porque permitem que você acesse arquivos por seus nomes usuais, mesmo com todas as outras reescritas acontecendo.
Percebi que estava recebendo redirecionamento de caminho infinito (que o Apache não conseguiu detectar), como shop/basket_checkout/basket_checkout/basket/checkout
; Foi quando percebi que o próprio Apache estava anexando caminhos ao final do caminho substituído! Assim, [DPI]
corrige isso.
O RewriteCond
extra no segundo bloco deve ser óbvio: ele impede o redirecionamento infinito (ou seja, se foo.php
estiver indisponível, não faz sentido tentar foo.php.php
, etc).
Deixe-nos saber como isso funciona para você.
Take II: boa tentativa, mas sem dados
Opa, até mais simples do que eu pensava. Mude [N]
para [C]
e você está pronto para ir. Como a documentação de [N]
diz:
Be careful not to create an infinite loop!
Qual é exatamente o que aconteceu aqui. ;-)
Eu quase tirei minha VM de teste na primeira tentativa - isso foi divertido!
No entanto, faz coisas estranhas quando o arquivo php não existe. Vou testar mais um pouco.