2011-03-14 50 views
1

是否可以从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> 

我该如何从这个配置文件传递任何变种? 或我该如何设置?其他方案?谢谢!

回答

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'); 
+0

听起来很简单!谢谢! – Francesco 2011-03-15 05:49:35

4

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

// in apache 
SetEnv VARNAME myvalue 

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

$ _ SERVER [“HTTP_HOST”]将显示这一点,但$ _ SERVER [“HTTP_ACCEPT_LANGUAGE”]可能是手头您的问题更好的人选。

+1

:另一种可能性是使用mod_rewrite,你也许能多虚拟主机的结合....例如。仅仅因为用户具有通常以一种语言显示内容的浏览器并不意味着他们总是**需要该语言的内容。如果他们故意选择了“en.domain.com”的URL,那么服务器应该尊重该选择而不是采用默认值。 – 2011-03-14 01:26:41

+1

我完全同意,但这并不完全清楚,这是这个问题的用例。只是在其他解决方案中寻求答案 - 是OP问题的一部分。 – 2011-03-14 01:28:57

1

您可以设置一个environment variable然后可以通过PHP访问。虚拟主机的配置会是这个样子:

SetEnv UNIQUE_ENV_VAR_NAME yourValue 

然后在PHP

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

正如其他人已经回答,mod_env是一个答案。使用`HTTP_ACCEPT_LANGUAGE`可能会很麻烦

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