Acontece que o apache e mod_rewrite estão realmente funcionando da maneira que deveriam, dada a configuração mostrada na pergunta. O framework php não estava fazendo uso do URL correto.
Ao usar o php com o apache, o apache cria diversas variáveis de servidor (ou seja, $_SERVER
global).
Assim, considerando as regras de reescrita acima, quando um usuário navega para example.com/resource
, o apache primeiro reescreveria para example.com/resource/
e, posteriormente, entregaria tudo para index.php
para manipular. O que não era tão óbvio foi que a variável $_SERVER['REQUEST_URI']
não foi alterada, mas o $_SERVER['REDIRECT_URL']
estava sendo definido com o novo uri reescrito.
Assim, a questão de não redirecionar era, na verdade, a estrutura que nunca usou o novo global introduzido pelo apache. Para fazer uso dessa variável global, estenda o Silex/Application.php
existente e sobrescreva seu método run()
da seguinte forma:
class Application extends Silex\Application
{
public function run(Request $request = null)
{
if (null === $request) {
if (isset($_SERVER['REDIRECT_URL'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_URL'];
}
$request = Request::createFromGlobals();
}
$response = $this->handle($request);
$response->send();
$this->terminate($request, $response);
}
}
Espero que isso ajude!
Alex