2011-04-23 4 views
9

내 우분투 홈 서버에 Zend를 설치했습니다. 내가 공용 폴더 내의 index.php에서 APPLICATION_ENV 에코 때.htaccess의 Zend SetEnv가 작동하지 않습니다.

SetEnv APPLICATION_ENV development 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ index.php [NC,L] 

이 APPLICATION_ENV가 설정되지 않은 : 내 htaccess로 파일에서 나는 다음과 같은 코드가 있습니다.

내가 뭘 잘못하고 있니?

아파치에서 MOD 재 작성이 사용 설정되었습니다. htaccess로 파일 내적인 SetEnv을 사용하려면

+1

를 사용할 수 있습니까? –

답변

16

, 나는 ... 당신이 설정해야합니다 생각

AllowOverride FileInfo 

... 관련 가상 호스트 디렉토리 블록 내에서. (그리고 평소와 같이 httpd 서비스를 다시 시작하십시오.)

또한 PHP 실행 방법에 따라 가능 이러한 정보가 삭제됩니다. (예 : suexec는 HTTP가 아닌 모든 환경 변수를 효과적으로 제거 할 것입니다.)

+2

AllowOverride 모두가 전체 .htaccess 파일을 읽을 수있게합니다 – Ascherer

+0

고마워요, 현재 서버가 불행히도 이것을 허용하지 않습니다. =/ – giovannipds

4

모든 로컬 ZF 응용 프로그램이 개발 모드로 실행되도록 로컬 서버의 httpd.conf 파일에 SetEnv를 두는 것을 선호합니다. 스테이징 서버에 푸시 (push) 환경을 설정하는 플래그가있는 프로덕션 서버에 프로덕션 서버가 없으므로 프로덕션 서버는 기본적으로 프로덕션 서버로 설정됩니다. ...

이렇게하면 소스 제어에서 동일한 .htaccess 파일을 유지할 수 있습니다. 그리고 다른 서버로 밀어 넣을 때 예상대로 작동합니다.

middaparka가 suExec에 관한 바로 ... suExec은 WebFaction 포럼의 remi에 따라 .htaccess 파일에 사용자 정의 환경 변수를 설정할 수 없도록합니다.

에서는 apachectl -l 또는 아파치 -l :

4

먼저 당신은 mod_env가 설치 (그리고 mod_rewrite를)

아파치 모듈 (들) 중 하나를로드가있는 경우 두 번 확인 필요

OS 배포에 따라 명령이 다를 수 있습니다.

.htaccess 파일을 작동 시키려면 AllowOveride All (모든 AllowOveride가 필요합니다.)은 Apache가 구성한 OS에 따라 다른 구성 파일 (및 "부분")에서 설정할 수 있습니다. 가장 좋은 옵션은 htaccess인지 확인하는 것입니다 파일 문제 나 환경 하나의 주 구성 파일에 어디 설정합니다..

적인 SetEnv testme라는 foobar를

다시 시작 아파치와 PHP 스크립트의 에코 TEST 당신이 그것을 가지고있는 경우, 디버그 htaccess로

참고 1 : 가상 호스트의 사용을 제한하십시오. .htacess를 사용하여 실제로 필요한 폴더로 이동하거나 구성을 가상 호스트로 이동하십시오.

참고 2 : Apache mod_dir을 설치 한 경우 이러한 재 작성 규칙이 모두 필요하지 않을 수도 있습니다.살펴보기

+0

내 우분투 컴퓨터에서 ** - ** 스위치가 보여줍니다 모듈로 컴파일됩니다. ** - M ** 스위치는 _all_ 로딩 된 모듈을 보여줍니다 (당신이 생각한 것입니다). –

1

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')); 

, 그것은 작동합니다.

3

은 또한 사용할 수 있습니다 : 당신이 mod_env가 서버에

RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE] 
+0

이것이 나에게 가장 쉬운 해결책이었습니다. 감사합니다. –

관련 문제