A reescrita do Apache funciona no FreeBSD, não no CentOS

A reescrita do Apache funciona no FreeBSD, não no CentOS

Tenho 5 servidores de produção executando o FreeBSD 9.2, mas estamos planejando fazer a transição para o CentOS. Por causa disso, estou tentando configurar algumas máquinas virtuais para emular nosso ambiente de servidor de produção usando CentOS 6.6. Eu configurei tudo e funciona muito bem, salve uma única regra de reescrita.

<Directory /var/www/html/www/trunk/amapi>
  RewriteEngine on
  RewriteRule  ^$ public/    [L]
  RewriteRule  (.*) public/$1 [L]
</Directory>
<Directory /var/www/html/www/trunk/amapi/public>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</Directory>
<Directory /var/www/html/www/trunk>
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*start\.php
  RewriteRule ^start.php/?(.*)$ $1 [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ start.php/$1?%{QUERY_STRING} [L]
</Directory>

As duas primeiras regras de reescrita são para uma API back-end usando Phalcon e funcionam perfeitamente em ambos os ambientes. A terceira regra de reescrita é pegar tudo para redirecionar todas as solicitações que não correspondem a um arquivo real para start.php, que tenta combiná-las com um módulo Phalcon e depois para uma página 404 se nenhuma rota for correspondida.

Por alguma razão, ele funciona no FreeBSD que está rodando o Apache 2.2.27, mas não no CentOS que está, no momento, rodando o Apache 2.2.15. Esta é uma regra de reescrita muito simples que deve funcionar em qualquer versão do Apache sem problemas, mas o Apache continua lançando um 404 quando tento acessar o arquivo. Estou esquecendo de algo? Obviamente, a configuração SSL e opções específicas estão faltando no código exibido, mas essa é a ordem em que os requisitos aparecem no ssl.conf.

Desde já, obrigado

Atualização: os logs do Apache Rewrite são:

10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (2) init rewrite engine with requested uri /letters/custom/test
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/attc2/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/forms/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/grafx/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '^/xport/(.*)$' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (3) applying pattern '.*' to uri '/letters/custom/test'
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (4) RewriteCond: input='' pattern='!.*mydomain.com/.*$' [NC] => matched
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (4) RewriteCond: input='/letters/custom/test' pattern='\\.(jpg|gif|png)$' => not-matched
10.1.1.135 - - [24/Feb/2015:17:39:17 --0500] [trunk.mydomain.com/sid#7f18f3072f98][rid#7f18f36099b8/initial] (1) pass through /letters/custom/test

Responder1

Eu me pergunto se possivelmente o problema é apenas um ponto sem escape. Tente substituir esta linha:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*start\.php

Com:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\.*start\.php

informação relacionada