Я использую Apache 2.2.26 с PHP 5.4.24 на Mac OS X 10.9.4. У меня в системе работает несколько виртуальных хостов, и все они работают успешно. Я пытаюсь добавить переменные окружения на один из виртуальных хостов, и я не хочу, чтобы они были в .htaccess, поэтому мой единственный вариант — добавить их в файл httpd-vhosts.conf.
Проблема в том, что переменные среды не появляются после того, как я установил их в файле httpd-vhosts.conf (и, конечно же, после перезапуска Apache «sudo apachectl restart»). Однако, если я добавлю их в .htaccess (только для сравнения), они выглядят просто отлично. Что мне не хватает?
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mysite.local
DocumentRoot "/path/to/mysite.com"SetEnv siteid 1234
ErrorLog "/var/log/apache2/mysite.local-error_log"</VirtualHost>
Я также дважды проверил свой файл php.ini, чтобы убедиться, что там нет ничего запретного, и единственная соответствующая строка выглядит хорошо:
variables_order = "GPCSE"
Опять же, просто для ясности, мои виртуальные хосты RUN FINE. Просто переменные окружения не появляются при вызове в моем PHP-коде. Я попробовал каждую из этих трех команд:
echo $_SERVER["siteid"];
echo getenv("siteid");
echo apache_getenv("siteid");
Что я могу делать не так ??
Это был мучительный квест для меня, но я нашел очень простой, но неясный ответ. Прежде всего, позвольте мне прояснить мой предыдущий вопрос о том, что я не осознавал, что мой Mac работает под управлением OS X Server, что эффективно изменило работу Apache в моей системе.
С учетом сказанного ниже приведен эквивалентный файл httpd-vhosts.conf НА ВИРТУАЛЬНЫЙ ХОСТ установлен в моей системе через приложение OS X Server.
/Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf
Ясно, что «80» — это порт для обычных http-запросов, а «mylocalsite» — это имя локального виртуального хоста, который я создал (в приложении OS X Server). Теперь, когда этот файл был создан OS X Server, я теперь могу отредактировать его следующим образом:
sudo vi /Library/Server/Web/Config/apache2/sites/0000_any_80_mylocalsite.conf
Который открыл конфигурационный файл, похожий и похожий на обычный файл httpd-vhosts.conf (обратите внимание на SetEnv Testid «1234» линия, которая является решением, которое я искал, и это может быть сделано только вручную, а не через приложение OS X Server) …
<VirtualHost *:80>
ServerName mysite.local
ServerAdmin [email protected]
DocumentRoot "/my/local/docroot/path/to/mysite.com"SetEnv testid "1234"DirectoryIndex index.html index.php /wiki/ /xcode/ default.html
CustomLog /var/log/apache2/access_log combinedvhost
ErrorLog /var/log/apache2/error_log
<IfModule mod_ssl.c>
SSLEngine Off
SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM"SSLProtocol -ALL +SSLv3 +TLSv1
SSLProxyEngine On
SSLProxyProtocol -ALL +SSLv3 +TLSv1
</IfModule>
<Directory "/my/local/docroot/path/to/mysite.com">
Options All -Indexes -ExecCGI -Includes +MultiViews
AllowOverride All
<IfModule mod_dav.c>
DAV Off
</IfModule>
<IfDefine !WEBSERVICE_ON>
Deny from all
ErrorDocument 403 /customerror/websitesoff403.html
</IfDefine>
</Directory>
</VirtualHost>
ПОЖАЛУЙСТА, надеюсь, это когда-нибудь поможет кому-то еще. Я потратил слишком много времени на поиски этого решения, только чтобы наткнуться на него в тактике грубой силы, и я хотел бы знать, что это, надеюсь, сэкономит кому-то часы на поиски себя.
Других решений пока нет …