Je suis en train de migrer de nombreux sites d'une ancienne à une nouvelle configuration de serveur. Chaque site est basé sur une base de code similaire (mais malheureusement pas identique), utilisant des 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)
Fonctionnant principalement comme un charme, mais sur la nouvelle configuration, $ _SERVER ['REDIRECT_URL'] n'est plus défini, et le code échoue en raison d'une dépendance à cette variable globale.
D'après ce que je comprends, cette variable est définie par Apache lorsqu'une redirection se produit. Évidemment, cela ne se produit pas maintenant, mais j'ai du mal à trouver la cause.
- S'agit-il de la mise à niveau d'Apache ou (à mon avis) du passage de PHP FastCGI à PHP5-FPM?
- Comment récupérer cette variable?
Je préfère vraiment ne pas avoir à éditer le code sur chaque site, je vais donc définir un auto_prepend PHP global si nécessaire, mais idéalement, je voudrais corriger la configuration du serveur et avoir cet ensemble en premier lieu.
Potentiellement lié: j'ai maintenant quelques nouvelles variables $ _SERVER, à savoir REDIRECT_SCRIPT_URL et REDIRECT_REDIRECT_SCRIPT_URL. Ceux-ci semblent avoir les données correctes que je veux pour REDIRECT_URL, mais semblent également indiquer qu'il y a deux redirections internes qui ne se produisaient pas auparavant - Google recherche REDIRECT_REDIRECT_SCRIPT_URL ne renvoie que des sorties var_dump aléatoires. SCRIPT_URL est-il le nouveau REDIRECT_URL?
Modifier 1
Vérifier à nouveau REDIRECT_URL est (maintenant) défini, mais toujours sur 'index.php' (la cible mod_rewrite) au lieu de l'URL typée attendue. J'ai eu recours à un fichier PHP auto_prepend_file pour définir manuellement la variable nécessaire.
Je ne sais pas comment je l'ai raté la première fois, mais j'ai fait plusieurs changements entre-temps, donc je suppose qu'il y a une chance extérieure qu'il n'y soit pas. Toutes mes excuses si cela induit quelqu'un en erreur.
Modifier 2
Pour répondre aux mentions de ErrorDocument ci-dessous, la règle mod_rewrite utilisée est:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
La variable $ _GET ['url'] est définie, la règle doit donc fonctionner.
Pour être clair, à ce stade, je suis allé avec la solution de contournement auto_prepend_file que j'ai mentionnée initialement.