J’ai été confronté au problème suivant deux fois avec un CMS fait maison : poster un formulaire avec la méthode post n’envoyait aucune information à la page définie dans l’attribut action du formulaire. Afficher $_POST :
print_r($_POST);
donnait systématiquement le même résultat :
array();
Mon fichier .htaccess définit Magic_quotes à 0, Register_Globals à 0 et PHP_VER à 5. Puis il contient quelques redirections 301 :
SetEnv MAGIC_QUOTES 0SetEnv REGISTER_GLOBALS 0SetEnv PHP_VER 5Options +FollowSymlinks -MultiViewsRewriteEngine onrewritecond %{http_host} ^mydomain.be [nc]rewriterule ^(.*)$ http://www.mydomain.be/$1 [r=301,nc]
Et le problème de $_POST vide vient des redirections 301 redirect. En effet, mon formulaire était posté à http://mydomain.be/index.php à cause d’une balise « base » définie à l’intérieur de la balise « head » de mon document :
<base href=’http://mydomain.be/’ />
et l’attribut action de la balise « form » était le suivant :
<form method=’post’ action=’./index.php’>
A cause des redirections 301 qui font pointer mydomain.be vers www.mydomain.be et le formulaire qui pointe vers mydomain.be/index.php, Apache n’associe pas le tableau $_POST avec www.mydomain.be mais avec le domaine domain.be. D’où le problème de $_POST vide.
J’espère que cet article vous épargnera quelques longues minutes de debugging.
Webliography :