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.
fuente
Respuestas:
REDIRECT_URL solo lo establece el servidor web Apache, y solo en determinadas circunstancias . Probablemente no sea algo en lo que deba confiar su código. Por lo que puedo decir, la mejor solución sería arreglar el código PHP defectuoso; realmente no puede forzar que esto se configure siempre en Apache.
fuente
De acuerdo con la documentación de PHP:
Por lo tanto, parece que no todas
$_SERVER
las variables superglobales son tan independientes de la plataforma como cabría esperar.$_SERVER['REQUEST_URI']
parece ser uno de esos valores que se define de manera consistente por todos los principales servidores web, por lo que es posible que desee intentar usarlo en su lugar.fuente
Para las imágenes faltantes en uno de nuestros proyectos que fueron redirigidos al index.php, solo utilicé esta solución:
url: http://www.domanXY.de/image.php?file=var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options=&options=resize_outer(320,150);sharpen(64) ;
Si desea una solución global, creo que debe usar explotar (), etc. y usar otra variable dada como $ _SERVER ['REQUEST_URI'].
fuente
Puede configurar un archivo php auto-prepend para incluir un pequeño fragmento de código PHP que establezca esta variable.
fuente