对于我们的项目,我们需要根据环境(开发/生产)设置多个PHP值,最值得注意的是会话保存路径以及一些跟踪和分析设置。
我们不想在PHP脚本中设置它们,因为由于一些可怕的遗留代码需要进行大量更改而且我们不希望每次在将它提交给git之前都必须更改.htaccess(但是我们要求.htaccess在源代码控制中。)
有没有办法在.htaccess中执行类似的操作:
if (hostname == "dev.example.com") {
php_value session.save_path /tmp
[...]
}
答案 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);
}