$ _SERVER renvoie l’URL complète au lieu du chemin d’access au script

Mon application PHP ne fonctionne pas car $ _SERVER [‘REQUEST_URI’] renvoie l’URL complète au script au lieu d’un chemin relatif.

Mon environnement:
Windows 7 64 bits.
XAMPP Version 1.8.2
PHP version 5.4.16
Apache Version Apache / 2.4.4 (Win32) OpenSSL / 0.9.8y PHP / 5.4.16

Mon hôte virtuel Conf:

 DocumentRoot "D:/HTDOCS/ivankristianto" ServerName www.ivankristianto.local UseCanonicalName Off  Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted   

J’ai créé un script de base pour tester le contenu de $ _SERVER:

 echo '$_SERVER[\'HTTP_HOST\'] : ' . $_SERVER['HTTP_HOST']; echo '
' . '$_SERVER[\'PHP_SELF\'] : ' . $_SERVER['PHP_SELF']; echo '
' . '$_SERVER[\'REQUEST_URI\'] : ' . $_SERVER['REQUEST_URI'];

Et voici le résultat:

 // URL: http://localhost/ivankristianto/request.php $_SERVER['HTTP_HOST'] : localhost $_SERVER['PHP_SELF'] : /ivankristianto/request.php $_SERVER['REQUEST_URI'] : /ivankristianto/request.php //This is correct 

Et

 // URL: http://www.ivankristianto.local/request.php $_SERVER['HTTP_HOST'] : www.ivankristianto.local $_SERVER['PHP_SELF'] : /request.php $_SERVER['REQUEST_URI'] : http://www.ivankristianto.local/request.php //This is wrong 

Je n’ai pas utilisé de proxy, tout ce que j’ai fait est de le définir dans mes fichiers / etc / hosts.

J’ai passé des heures à découvrir pourquoi cela se produit et j’ai effectué une recherche via Google et ce site Web, mais je ne trouve aucun indice.

Pouvez-vous m’indiquer ce qui ne va pas?

Merci.
Ivan

Je pense que vous recevez l’effet souhaité de la création d’un hôte virtuel:

Aucun hôte virtuel:

 /ivankristianto/request.php 

Avec l’ hôte virtuel:

 http://www.ivankristianto.local/request.php 

http://www.ivankristianto.local – Je pense que cela vous semble faux car il contient http://www et .local – vous pouvez changer cela en invankristano et votre REQUEST_URI affichera le même résultat que si vous n’aviez pas d’hôte virtuel . Il représente le chemin d’access à votre request.php – que vous avez défini dans le fichier hosts et fait donc partie intégrante de l’URI.

Donc, fondamentalement, ce que je dis, c’est qu’il n’y a rien de mal.

Si cela vous pose problème, une solution consisterait à déterminer quel environnement vous vous trouvez, par exemple

 if($_SERVER['HTTP_HOST'] == 'www.ivankristianto.local') { $dev_env = TRUE; }else { $dev_env = FALSE; } 

alors quelque part utiliser cela:

 if($dev_env) { $_SERVER['REQUEST_URI'] = str_replace($_SERVER['HTTP_HOST'],'',$_SERVER['REQUEST_URI']); } 

mettre à jour

essayez de changer d’hôte conf à:

  DocumentRoot "D:/HTDOCS/ivankristianto" ServerName ivankristianto.local UseCanonicalName Off  Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted   

(supprimer www. de nom_serveur)

J’ai finalement réussi à le faire fonctionner.
Voici les étapes que j’ai suivies (je ne sais pas pourquoi cela se produit, mais cela fonctionne maintenant).

  1. Installer PHP Fastcgi sur xampp, je suis les étapes suivantes: https://commaster.net/content/installing-php-fastcgi-and-zend-opcache-xampp-windows
  2. Je charge le mod_fcgid, mais je n’utilise pas le gestionnaire php-cgi.exe
  3. Mettre à jour mon fichier / etc / hosts et vider dns avec cette commande ipconfig / flushdns
  4. Redémarrer apache

Et ça marche en quelque sorte.
Honnêtement, je ne sais pas pourquoi cela fonctionne, mais si quelqu’un tombe sur le même problème, j’espère que la solution pourrait aider.

Eu le même problème récemment,
Ma solution:
Vérifiez tout d’abord si votre http: // localhost a le même effet.
Sinon, ajoutez votre hôte virtuel (domaines) au fichier / etc / host.

J’espère que c’est utile.