Sto eseguendo la migrazione di molti siti da una configurazione server precedente a una nuova. Ogni sito è basato su una base di codice simile (ma purtroppo non identica), usando gli 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 funziona come un incantesimo, ma nella nuova configurazione $ _SERVER ['REDIRECT_URL'] non è più impostato e il codice non riesce a causa di una dipendenza da questa variabile globale.
Da quanto ho capito, questa variabile viene impostata da Apache quando si verifica un reindirizzamento. Ovviamente questo non sta accadendo ora, ma sto lottando per trovare la causa.
- È l'aggiornamento di Apache o (suppongo) il passaggio da PHP FastCGI a PHP5-FPM?
- Come posso recuperare questa variabile?
Preferirei davvero non dover modificare il codice su ogni sito, quindi imposterò un PHP auto_prepend globale se necessario, ma idealmente mi piacerebbe correggere la configurazione del server e avere questo set in primo luogo.
Potenzialmente correlati: ora ho anche un paio di nuove variabili $ _SERVER, ovvero REDIRECT_SCRIPT_URL e REDIRECT_REDIRECT_SCRIPT_URL. Questi sembrano avere i dati corretti che desidero per REDIRECT_URL, ma sembrano anche indicare che si stanno verificando due reindirizzamenti interni che non esistevano prima: Google cerca REDIRECT_REDIRECT_SCRIPT_URL restituisce solo output var_dump casuali. SCRIPT_URL è il nuovo REDIRECT_URL?
Modifica 1
Controllare di nuovo REDIRECT_URL è (ora) impostato, ma sempre su 'index.php' (il target mod_rewrite) invece dell'URL digitato previsto. Ho fatto ricorso all'uso di PHP auto_prepend_file per impostare manualmente la variabile necessaria.
Non sono sicuro di come mi sia perso la prima volta, ma nel frattempo ho apportato diverse modifiche, quindi suppongo che ci sia una possibilità esterna che non fosse lì. Ci scusiamo se questo induce in errore chiunque.
Modifica 2
Per affrontare le menzioni di ErrorDocument di seguito, la regola mod_rewrite in uso è:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
La variabile $ _GET ['url'] è impostata, quindi la regola deve funzionare.
Per essere chiari, in questa fase sono andato con la soluzione alternativa auto_prepend_file che ho citato inizialmente.