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.
la source
Réponses:
REDIRECT_URL est défini uniquement par le serveur Web Apache et uniquement dans certaines circonstances . Ce n'est probablement pas quelque chose sur lequel votre code devrait s'appuyer. Pour autant que je sache, la meilleure solution serait de corriger le code PHP buggé; vous ne pouvez pas vraiment forcer cela à être toujours défini dans Apache.
la source
Selon la documentation de PHP:
Il semblerait donc que toutes les
$_SERVER
variables superglobales ne soient pas aussi indépendantes de la plate-forme que l'on pourrait s'y attendre.$_SERVER['REQUEST_URI']
semble être l'une de ces valeurs qui est définie de manière cohérente par tous les principaux serveurs Web, vous pouvez donc essayer de l'utiliser à la place.la source
Pour les images manquantes dans l'un de nos projets qui ont été redirigées vers index.php, je viens d'utiliser ce correctif:
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 vous voulez une solution globale, je pense que vous devez utiliser explode () etc et utiliser une autre variable donnée comme $ _SERVER ['REQUEST_URI'].
la source
Vous pouvez définir un fichier de pré-ajout automatique php pour inclure un petit extrait de code PHP qui définit cette variable.
la source