是否可以从apache设置会话变量?

时间:2011-03-14 01:19:18

标签: php apache

是否可以从apache设置会话变量?

我的意思是我有

<VirtualHost *:80>
ServerName www.domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/domain/
</VirtualHost>

指向主站点,然后我想为打开子域名的用户 en.domain.com,加载语言文件EN等等。

<VirtualHost *:80>
ServerName en.domain.com
ServerAlias en.domain.com
DocumentRoot /var/www/domain/ [????]
</VirtualHost>

如何从此配置文件传递任何var? 或者我该怎么设置它?其他方案?谢谢!

5 个答案:

答案 0 :(得分:4)

您可以在apache中使用SetEnv,在php中使用getenv。这会将一个变量从Apache传递到PHP,但是在$ _SESSION中设置它是没有意义的,因为来自apache的值有点静态。

// in apache
SetEnv VARNAME myvalue

// in php
echo getenv('VARNAME');

答案 1 :(得分:1)

$ _ SERVER [“HTTP_HOST”]会显示此信息,但$ _SERVER [“HTTP_ACCEPT_LANGUAGE”]可能是您手头问题的更好选择。

答案 2 :(得分:1)

您可以设置environment variable然后可以通过PHP访问。 vhost配置看起来像这样:

SetEnv UNIQUE_ENV_VAR_NAME yourValue

然后在PHP中

if (isset($_SERVER['UNIQUE_ENV_VAR_NAME'])) {
    executeYourCode();
}

答案 3 :(得分:1)

您可以使用mod_env在配置中设置环境变量:

<VirtualHost *:80>
  ServerName en.domain.com
  ServerAlias en.domain.com
  DocumentRoot /var/www/domain/
  SetEnv LANG en
</VirtualHost>

然后你可以从PHP中选择它们:

$lang = getenv('LANG');

答案 4 :(得分:0)

正如其他人已经回答的那样,mod_env就是一个答案。另一种可能性是使用mod_rewrite,您可以组合许多虚拟主机....例如:

RewriteEngine On
RewriteCond %{SERVER_NAME} ^([^.]*)\.domain\.com$
RewriteRule ^.*$(subdomain)? - [E=SUBDOMAIN:%1]