.htaccess根据主机名设置PHP值

时间:2010-07-12 11:19:00

标签: php apache .htaccess

对于我们的项目,我们需要根据环境(开发/生产)设置多个PHP值,最值得注意的是会话保存路径以及一些跟踪和分析设置。

我们不想在PHP脚本中设置它们,因为由于一些可怕的遗留代码需要进行大量更改而且我们不希望每次在将它提交给git之前都必须更改.htaccess(但是我们要求.htaccess在源代码控制中。)

有没有办法在.htaccess中执行类似的操作:

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

2 个答案:

答案 0 :(得分:6)

你可以在Apache的virtualhost配置中定义规则(上面一步.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设置都支持此功能。

答案 1 :(得分:0)

在之前的工作中,我们使用了以下内容:

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

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

然后使用附加开关为starup添加apache:

-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);

}