
我有一個 VirtualHost,它將許多子域定向到同一目錄。
- 莫斯科.myapp.com
- paris.myapp.com
所有這些網站都在同一個應用程式上運行。我唯一需要從子網域變更為另一個子網域的是 php 設定 date.timezone。
我無法觸及應用程式程式碼。我正在尋找一種直接在虛擬主機中執行此操作的方法。
是否可以 ?你會怎麼做?
非常感謝;
答案1
我嘗試並研究了基於查找表或環境變數(由 php_value 設定SetEnvIf
)來設定 php_admin_value 並使用 php_value 設定變數的方法,但沒有發現任何可能適合您的方法(將所有配置都放在一個中VirtualHost
)。
作為最後的手段,我可以建議你採取一個狡猾的計劃,隱藏一些代碼...
使用 php 設定指令,auto_prepend_file
您可以在實際啟動腳本之前執行一些程式碼。在那裡您可以根據虛擬主機進行查找,或使用SetEnvIf
.
Apache 虛擬主機設定:
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 應用程序,由於非技術原因而無法訪問,這可能是解決方案。