web-dev-qa-db-fra.com

La directive SetEnv ne fonctionne pas pour localhost VirtualHost mais fonctionne pour les autres VirtualHost

J'ai deux hôtes virtuels déclarés: localhost et test.

Les deux utilisent la directive SetEnv et pointent sur le même DocumentRoot:

NameVirtualHost *:80

<VirtualHost _default_:80>
    DocumentRoot "/Users/mf/Sites/test"
    SetEnv FROM_ROOT 'i like tacos'             ## <- SetEnv
</VirtualHost>

<VirtualHost *:80>
    ServerName localhost    
    DocumentRoot "/Users/mf/Sites/test"
    <Directory "/Users/mf/Sites/test">
        Options Includes FollowSymLinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    SetEnv FROM_VHOST 'set in localhost vhost'  ## <- SetEnv
</VirtualHost>

<VirtualHost *:80>
    ServerName test
    DocumentRoot "/Users/mf/Sites/test"
    <Directory "/Users/mf/Sites/test">
        Options Includes FollowSymLinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    SetEnv FROM_VHOST 'set in test vhost'        ## <- SetEnv
</VirtualHost>

J'ai un fichier de test / Users/mf/Sites/test/dump.php:

var_dump( $_SERVER );

Pour http://test/ tout fonctionne comme prévu, $_SERVER['FROM_VHOST'] est disponible. dump.php sorties:

array (size=33)
  'UNIQUE_ID' => string 'UY7bHMCoAXIAABkbAkMAAAAC' (length=24)
  'FROM_VHOST' => string 'set in test vhost' (length=17)
  'HTTP_Host' => string 'test' (length=4)
…

Pour http://localhost/ les choses se décomposent:

array (size=34)
  'UNIQUE_ID' => string 'UY7bA8CoAXIAABkZAhQAAAAA' (length=24)
  'FROM_ROOT' => string 'i like tacos' (length=5)
  'HTTP_Host' => string 'localhost' (length=9)
…

?

  1. Pourquoi localhost n'a-t-il pas de variable d'environnement FROM_VHOST?
  2. Pourquoi seul localhost voit-il la variable d'environnement FROM_ROOT?
2
Mark Fox

Peu de choses à essayer:

1) Cela peut être dû au fait que vous avez configuré localhost comme nom d’hôte, ce qui déclencherait probablement et plus probablement le valeur par défaut, archivez/etc/hostname ou utilisez éventuellement un nom de domaine complet comme web.localhost.

2) Une autre chose à essayer est de mettre Défaut en bas plutôt qu'en haut, car les plus hauts deviennent plus prioritaires.

3) Le correctif évident n'utilise pas localhost en tant que vhost :)

Je ne suis pas trop confiant avec ma réponse, mais essaye (j'y reviendrai quand j'aurai plus de temps)}

2
Simon Hayter