Estou no processo de migrar muitos sites de uma antiga para uma nova configuração de servidor. Cada site é baseado em uma base de código semelhante (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 precisar editar o código em cada site, portanto, definirei um auto_prepend global do PHP, se necessário, mas, idealmente, gostaria de corrigir a configuração do servidor e defini-la em primeiro lugar.
Potencialmente relacionado: agora também tenho algumas novas variáveis $ _SERVER, REDIRECT_SCRIPT_URL e REDIRECT_REDIRECT_SCRIPT_URL. Estes parecem ter os dados corretos que eu quero para o REDIRECT_URL, mas também parecem indicar que há dois redirecionamentos internos que não existiam antes - o Google pesquisa por REDIRECT_REDIRECT_SCRIPT_URL apenas retorna saídas aleatórias var_dump. SCRIPT_URL é o novo REDIRECT_URL?
Editar 1
Verificar novamente que REDIRECT_URL está (agora) definido, mas sempre para 'index.php' (o destino mod_rewrite) em vez do URL digitado esperado. Eu usei o arquivo auto_prepend_file do PHP para definir manualmente a variável necessária.
Não sei ao certo como perdi a partida da primeira vez, mas fiz várias alterações enquanto isso, então suponho que haja uma chance externa de que ela não estivesse lá. Desculpas se isso enganar alguém.
Editar 2
Para abordar 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, portanto a regra deve estar funcionando.
Para deixar claro, nesta fase, eu segui a solução alternativa auto_prepend_file que mencionei inicialmente.
fonte
Respostas:
REDIRECT_URL é definido apenas pelo servidor da web Apache e apenas em determinadas circunstâncias . Provavelmente não é algo em que seu código deva confiar. Até onde eu sei, a melhor solução seria consertar o código PHP com erros; você não pode realmente forçar que isso seja sempre definido no Apache.
fonte
De acordo com a documentação do PHP:
Portanto, parece que nem todas as
$_SERVER
variáveis superglobais são tão independentes de plataforma quanto seria de esperar.$_SERVER['REQUEST_URI']
parece ser um desses valores que é definido consistentemente por todos os principais servidores da web; portanto, você pode tentar usá-lo.fonte
Para imagens ausentes em um de nossos projetos que foram redirecionados para o index.php, usei essa correção:
url: http://www.domanXY.de/image.php?file=var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options=&options=&options=resize_outer(320,150);sharpen(64) ;
Se você quer uma solução global, acho que você tem que usar explode () etc e usar outra variável, como $ _SERVER ['REQUEST_URI'].
fonte
Você pode definir um arquivo de pré-adição automática do php para incluir um pequeno trecho de código PHP que define essa variável.
fonte