web-dev-qa-db-ja.com

SetEnvディレクティブはlocalhost VirtualHostでは機能しませんが、他のVirtualHostでは機能します

Localhostとtestという2つの仮想ホストが宣言されています。

両方ともSetEnvディレクティブを使用し、同じ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>

テストファイルがあります/ Users/mf/Sites/test/dump.php

var_dump( $_SERVER );

http://test/すべてが期待どおりに機能するため、$_SERVER['FROM_VHOST']が利用可能です。 dump.phpの出力:

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

http://localhost/の場合、次のように分類されます。

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

  1. LocalhostにFROM_VHOST環境変数がないのはなぜですか?
  2. LocalhostだけがFROM_ROOT環境変数を見るのはなぜですか?
2
Mark Fox

試すべきことはほとんどありません:

1)これは、デフォルトをトリガーする可能性が高いホスト名としてlocalhostがセットアップされているか、/ etc/hostnameをチェックインするか、オプションでweb.localhostなどのFQDNを使用することが原因である可能性があります

2)試すべきもう1つのことは、上位の優先順位が高くなるため、上部ではなく下部にデフォルトを配置することです。

3)明白な修正は、localhostをvhostとして使用しないでください:)

私は自分の答えに自信がありませんが、試してみてください(もっと時間ができたらこれを再訪します}

2
Simon Hayter