2010-07-12 88 views
5

對於我們的項目,我們需要根據環境(開發/生產)設置多個PHP值,最值得注意的是會話保存路徑以及一些跟蹤和分析設置。.htaccess根據主機名設置PHP值

我們不想在PHP腳本中設置它們,因爲由於一些可怕的遺留代碼會需要很多更改,我們不希望每次在將它提交到git之前都必須更改.htaccess(但我們需要.htaccess來源控制)。

有沒有辦法做這樣的事情在.htaccess:

if (hostname == "dev.example.com") { 
    php_value session.save_path /tmp 
    [...] 
} 

回答

6

可以在Apache的虛擬主機配置定義規則(一步以上的.htaccess,你要問管理員編輯此):

<VirtualHost *:80>                
    ServerName piskvor.example.com 
    ServerAlias *.host2.example.com 
    php_value session.save_path /home/piskvor/tmp 
</VirtualHost> 
<VirtualHost *:80>                
    ServerName someotherhost.example.org 
    php_value session.save_path /tmp 
</VirtualHost> 

這使您可以配置每個可能性主機不同(通過主機名或主機名通配符)。大多數更新的Apache設置都支持這一點。

0

在我們使用指定下列以前的工作:

<IfDefine SERVER1> 
    php_value session.save_path /tmp1 
</IfDefine> 

<IfDefine SERVER2> 
    php_value session.save_path /tmp2 
</IfDefine> 

隨後的Starup阿帕奇與你附加的開關:

-D SERVER1 SERVER2

編輯:

編輯

也許像下面可能是一箇中間立場?

if (!file_exists('.htaccess')) { 

    copy('.htaccess.default', '.htaccess'); 

    $handle = fopen('.htaccess', 'a'); 

    switch ($_SERVER['HTTP_HOST']) { 

    case 'dev.site': 
     fwrite($handle, 'php_value .....' . "\n"); 
     fwrite($handle, 'php_value .....' . "\n"); 
    break; 

    case 'live.site': 
     fwrite($handle, 'php_value .....' . "\n"); 
     fwrite($handle, 'php_value .....' . "\n"); 
    break; 

    } 

    fclose($handle); 

} 
+0

這是朝着正確方向邁出的一步,但管理員肯定會阻止這一點。我會盡力與他們談判,但我仍然希望僅限於.htaccess – dbemerlin 2010-07-12 11:34:00

+0

這不會帶來任何安全風險,但我相當確定這是多功能的.htaccess將會得到。如何靜靜地寫入.htaccess的PHP腳本? – 2010-07-12 11:43:06