Я установил Zend на моем сервере для ubuntu. В моем файле .htaccess у меня есть следующий код:
SetEnv APPLICATION_ENV development RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [NC,L]
Когда i echo APPLICATION_ENV в моем index.php в общей папке, APPLICATION_ENV не установлен.
Что я делаю не так?
Модификация перезаписи включена в apache.
Чтобы использовать SetEnv в файле .htaccess, я считаю, что вам нужно установить …
AllowOverride FileInfo
… в соответствующем блоке каталога virtualhost. (И затем перезапустите службу httpd как обычно.)
Кроме того, в зависимости от того, как вы используете PHP, возможно, что такая информация удаляется. (например: suexec будет эффективно удалять все не-HTTP * окружения vars.)
Я предпочитаю помещать SetEnv в файл httpd.conf для локального сервера, так что все мои локальные приложения ZF запускаются в режиме разработки, а когда я нажимаю на промежуточный сервер, у него есть флаг для установки среды для постановки, тогда производство сервер не имеет такой настройки, поэтому он по умолчанию обрабатывает …
Таким образом, я могу сохранить тот же файл .htaccess в исходном элементе управления, и когда я выталкиваю его на разные серверы, он ведет себя так, как ожидалось.
middaparka прав насчет suExec … suExec запрещает вам устанавливать настраиваемые переменные среды в вашем файле .htaccess – согласно реми на форуме WebFaction.
Сначала вам нужно установить mod_env (и mod_rewrite)
Дважды проверьте, есть ли у Apache модуль (модули), загруженный либо:
apachectl -l или httpd -l
Я думаю, что команда может отличаться в зависимости от дистрибутива ОС.
Для работы с файлом .htaccess вам необходимо разрешить все, что может быть установлено в разных конфигурационных файлах (и «частях» в зависимости от того, как ваша ОС была настроена на Apache. Лучше всего узнать, является ли это проблемой файла htaccess или окружение 1. Установить в любом месте основного файла конфигурации:
SetEnv TESTME foobar
перезапустите Apache и Echo TEST из скрипта PHP. Если вы его получили, отлаживайте .htaccess
Примечание 1: Ограничьте в своем виртуальном хосте использование .htacess в папку, в которой вы действительно нуждаетесь, или переместите конфигурации на виртуальный хост.
Примечание 2: Если у вас установлен Apache mod_dir, вам, вероятно, не нужны все эти правила перезаписи. Посмотри на это
Вы также можете использовать:
RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE]
Если вы используете домашний сервер на Mac или имеете suEXEC, есть меры безопасности, чтобы удалить любые переменные среды, отличные от HTTP, которые не определены, поэтому они не будут отображаться в $ _ENV ['APPLICATION_ENV']. Вы можете, однако, получить доступ к ним через функцию PHP, чтобы получить то же самое.
$var = apache_getenv('APPLICATION_ENV');
Вы даже можете определить переменную окружения в PHP, если хотите, хотя и не рекомендуется.
$_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV');
У меня почти идентичная конфигурация того, что у вас есть, и мы просто определяем глобальную:
define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV'));
Как только вы это сделаете, он должен работать по своему желанию.