Ответ 1
Я начинаю около 4 часов в этой проблеме, и я считаю, что у меня есть окончательный ответ и могу суммировать для всех, как решить эту особенно болезненную проблему.
Я использую Windows 7 Home Premium с Apache 2.2x и Php 5.3 в качестве моей машины dev. Я тоже хочу иметь переменную среды DEV, которую я могу использовать в своих файлах .htaccess, чтобы отключить переписывание и другие директивы, которые недействительны в моей среде разработки, но имеют решающее значение для моей рабочей среды.
Мой .htaccess файл выглядит следующим образом:
<IfDefine !__DEV__>
AddType application/x-httpd-php53 .php
</IfDefine>
HostGator сообщил мне, что для того, чтобы иметь php 5.3, мне нужно было изменить файл htaccess, как этот, чтобы включить его, или я бы имел только php 5.2. Но у меня уже есть это на моей машине dev, поэтому эта директива вызвала сбой моего клиентского сайта, когда я рассматривал его локально. Все, что я собираюсь объяснить, позволило мне сохранить один файл .htaccess в моем репозитории Git, который работает в обоих местах.
Во-первых, позвольте мне понять/обобщить все, что я узнал, читая Интернет, чтобы использовать IfDefine и SetEnv для решения этой проблемы;
- Директива IfDefine в Apache, Only, ONLY, и когда я говорю только, что я имею в виду ТОЛЬКО, отвечает на параметры, переданные в командной строке. Позвольте мне подчеркнуть это немного. ТОЛЬКО КОМАНДНАЯ ЛИНИЯ!
- SetEnv и SetEnvIf - две совершенно разные вещи. Один (SetEnv) предназначен для использования в файлах conf, устанавливая переменные среды (специфичные для apache), установленные в SERVER START TIME. SetEnfIf используется в ВРЕМЯ ЗАПРОСА и используется только для определения того, что нужно установить на основе переменных REQUEST.
- Директива IfDefine не считывает переменные, заданные SetEnv или SetEnvIf. Период. Нет никаких аргументов, нет вопросов, нет "но я думал..." НЕТ. Это не так, так что преодолейте это.
Короткий ответ НЕТ, вы не можете просто использовать "SetEnv DEV 1" в httpd.conf, а затем использовать IfDefine, чтобы обнаружить его в вашем файле .htaccess, который казался бы интуитивным и разумным на основе синтаксиса и характера логика программирования, к которой привык любой из нас. Напомним, что мы на самом деле ничего не программируем, это файлы конфигурации, и, конечно же, они не соответствуют этому ожиданию просто потому, что кажется, что они должны.
Ответ
Итак, это означает, что мне нужно выяснить, как добавить параметр запуска в Apache, ну для Linux Guys, этот ответ легко доступен, вам просто нужно добавить нужный материал в envvars файл, но как насчет бедных windows наркоманов?
Хорошо для пользователей Windows это становится веселее по следующим причинам:
- Windows не позволяет вам постоянно добавлять параметры запуска в конфигурацию сервисов для Apache2.2 (это не работает, не пытайтесь, я сделал это миллион раз, поверьте мне). Это верно, если вы войдете туда и попытаетесь ввести свои собственные параметры, он будет работать только один раз, а затем поле параметра будет пустым при следующем открытии диалогового окна. Я не знаю, почему это так, но кажется, что эти параметры предназначены для тестирования, а не для постоянной модификации.
- Когда Apache установлен, в стартовом меню создаются ярлыки "Старт", "Стоп" и "Перезагрузка", а также устанавливается монитор служб Apache. НО ярлыки в стартовом меню используют разные параметры запуска, чем те, которые используются монитором служб Apache. Поэтому, если вы начнете/остановите apache, используя комбинацию этих методов, вы получите разные результаты в зависимости от того, какой метод вы использовали. Однако вы можете поместить -D "__DEV__" в ярлык меню "Пуск" , и он будет работать!
Шаги по его решению
Чтобы постоянно и повсеместно настраивать переменную среды __DEV__, которую вы можете ссылаться с помощью IfDefine в файлах .htaccess, в среде разработки Windows, которая будет работать независимо от того, запускаете ли вы Apache с помощью службы или ярлыков в меню "Пуск" или с помощью NET START/STOP в командной строке, выполните следующие действия:
-
Откройте свойства для ярлыка меню "Пуск" и извлеките команду, которую вы найдете для запуска Apache. Мой был; "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -w "-n" Apache2.2 "-k start
-
Измените его, чтобы включить новую переменную -D __DEV__, которая ДОЛЖНА идти сразу же после httpd.exe; "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -D "__DEV __" -w -n "Apache2.2" -k start
-
Ярлык вашего стартового меню теперь запускает apache с вашей переменной dev на месте.
-
Перейдите в командную строку (как администратор)
-
Тип: net stop apache2.2 (или любое другое имя вашего сервиса для apache)
-
Теперь введите (или скопируйте-вставить) ту же команду, что и в стартовом меню, в командной строке, но вносите в нее следующие изменения; "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe" -D "__DEV__" -w -n "Apache2.2" -k config
- Обратите внимание на изменение слова start на config. Эта магическая команда сохраняет настройки, которые вы видите на экране, в настройках, хранящихся в службе в Windows. Нажмите Enter. С этого момента ваша переменная будет передаваться всякий раз, когда вы запускаете службу, аранжировщик служб Apache запускает службу, или окна запускают службу.
Извините за роман всех, я надеюсь, что это поможет какой-то другой изнурительной душе, чтобы все это было обобщено и объяснено, я знаю, что это помогло бы мне!: D