Estoy en el proceso de migrar muchos sitios de una configuración de servidor antigua a una nueva. Cada sitio se basa en una base de código similar (pero lamentablemente no idéntica), utilizando URL 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 funciona como un encanto, pero en la nueva configuración, $ _SERVER ['REDIRECT_URL'] ya no está configurado y el código falla debido a la dependencia de esta variable global.
Por lo que entiendo, Apache establece esta variable cuando se produce una redirección. Obviamente esto no está sucediendo ahora, pero estoy luchando por encontrar la causa.
- ¿Es la actualización de Apache o (supongo) el cambio de PHP FastCGI a PHP5-FPM?
- ¿Cómo recupero esta variable?
Realmente prefiero no tener que editar el código en cada sitio, por lo que estableceré un auto_prepend PHP global si es necesario, pero idealmente me gustaría arreglar la configuración del servidor y tener esto configurado en primer lugar.
Potencialmente relacionado: ahora también tengo un par de nuevas variables $ _SERVER, a saber, REDIRECT_SCRIPT_URL y REDIRECT_REDIRECT_SCRIPT_URL. Estos parecen tener los datos correctos que quiero para REDIRECT_URL, pero también parecen indicar que se están produciendo dos redireccionamientos internos que no existían antes: Google busca REDIRECT_REDIRECT_SCRIPT_URL solo devuelve salidas aleatorias de var_dump. ¿SCRIPT_URL es el nuevo REDIRECT_URL?
Editar 1
Verificando nuevamente REDIRECT_URL está (ahora) configurado, pero siempre en 'index.php' (el objetivo mod_rewrite) en lugar de la URL escrita esperada. He recurrido a usar PHP auto_prepend_file para configurar manualmente la variable necesaria.
No estoy seguro de cómo me lo perdí la primera vez, pero he hecho varios cambios mientras tanto, así que supongo que hay una posibilidad externa de que no estuviera allí. Disculpas si esto engaña a alguien.
Editar 2
Para abordar las menciones de ErrorDocument a continuación, la regla mod_rewrite en uso es:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
La variable $ _GET ['url'] está establecida, por lo que la regla debe estar funcionando.
Para ser claros, en esta etapa he seguido con la solución de auto_prepend_file que mencioné inicialmente.