Estou no processo de migrar muitos sites de uma configuração antiga para uma nova. Cada site é baseado em uma base de código similar (mas infelizmente não idêntica), usando URLs mod_rewrite.
- Ubuntu 8.04 LTS = > Ubuntu 12.04 LTS
- Apache 2.22.8 = > Apache 2.2.22
- PHP 5.2 (FastCGI) = > PHP 5.3 (PHP5-FPM)
Principalmente funcionando como um encanto, mas na nova configuração, o $ _SERVER ['REDIRECT_URL'] não está mais definido, e o código está falhando devido a uma dependência dessa variável global.
Pelo que entendi, essa variável é definida pelo Apache quando ocorre um redirecionamento. Obviamente, isso não está acontecendo agora, mas estou lutando para encontrar a causa.
- É a atualização do Apache, ou (meu palpite), a mudança do PHP FastCGI para o PHP5-FPM?
- Como obtenho essa variável de volta?
Eu realmente prefiro não ter que editar o código em cada site, então eu vou definir um auto_prepend de PHP global, se necessário, mas o ideal é que eu gostaria de consertar a configuração do servidor e ter isso configurado em primeiro lugar.
Potencialmente relacionado: agora também tenho algumas novas variáveis $ _SERVER, a saber, REDIRECT_SCRIPT_URL e REDIRECT_REDIRECT_SCRIPT_URL. Esses parecem ter os dados corretos que desejo para o REDIRECT_URL, mas também parecem indicar que há dois redirecionamentos internos que não ocorreram antes - as pesquisas no Google por REDIRECT_REDIRECT_SCRIPT_URL retornam apenas saídas aleatórias de var_dump. O SCRIPT_URL é o novo REDIRECT_URL?
Editar 1
Verificando novamente REDIRECT_URL é (agora) definido, mas sempre para 'index.php' (o alvo mod_rewrite) em vez do URL digitado esperado. Eu tenho recorrido a um PHP usando auto_prepend_file para definir manualmente a variável necessária.
Não sei como perdi a primeira vez, mas fiz várias alterações nesse meio tempo, então acho que há uma chance de não estar lá. Desculpas se isso enganar alguém.
Editar 2
Para endereçar as menções de ErrorDocument abaixo, a regra mod_rewrite em uso é:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
A variável $ _GET ['url'] está definida, então a regra deve estar funcionando.
Para ser claro, neste estágio, fui com a solução auto_prepend_file que mencionei inicialmente.