2011-03-14 32 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] 
相關問題