Zend SetEnv в .htaccess не работает

Я установил 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')); 

Как только вы это сделаете, он должен работать по своему желанию.