我有一个 VirtualHost,它将许多子域名指向同一个目录。
- 莫斯科.myapp.com
- paris.myapp.com
所有这些网站都在同一个应用程序上运行。我唯一需要从子域名更改为另一个子域名的是 php 设置 date.timezone。
我无法接触应用程序代码。我正在寻找一种在 vHost 中直接进行接触的方法。
有可能吗?你会怎么做?
非常感谢;
答案1
我曾尝试并研究过一种基于查找表或环境变量(由设置SetEnvIf
)设置 php_admin_value 的方法,并使用 php_value 设置变量,但没有发现任何可能适合您的方法(将所有配置放在一个中VirtualHost
)。
作为最后的手段,我可以建议你采取一个狡猾的计划,隐藏一些代码......
使用 php 配置指令,auto_prepend_file
您可以在实际启动脚本之前执行一些代码。您可以在那里根据虚拟主机进行查找,或者使用 设置的变量SetEnvIf
。
Apache VirtualHost 配置:
SetEnvIfNoCase Host "^sandbox.coolhaven.info$" TZ=Europe/Moscow
SetEnvIfNoCase Host "^sandbox2.coolhaven.info$" TZ=Europe/Paris
php_value auto_prepend_file /var/www/misc/timezone_injector.php
/var/www/misc/timezone_injector.php
<?php date_default_timezone_set($_ENV["TZ"]);
当然,这些SetEnvIf
语句可以移至 php 代码中的 switch 语句。
您的应用程序开发人员可能会怀疑在他们的代码之前发生了一些事情,因为它们timezone_injector.php
会显示在堆栈跟踪中。但如果您有一个模糊或严格许可的 PHP 应用程序,由于非技术原因您无法接触,这可能是一个解决方案。