.htaccess에서 PHP로 환경 변수를 전달하려고합니다. 이것은 내 로컬 WAMP 서버에서 정상적으로 작동하지만 내 웹 사이트가 호스팅되는 서버에서는 이유없이 실패합니다.환경 변수가 .htaccess에서 PHP로 전달되지 않습니다.
여기 내 테스트 구성입니다 :
htaccess로 :
이SetEnv TEST_VARIABLE test_value
test.php : 내 로컬 서버에서
<pre>
getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?>
getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?>
</pre>
제대로 test.php 점점 반환
getenv('TEST_VARIABLE') = test_value
getenv('REDIRECT_TEST_VARIABLE') =
하지만 프로덕션 서버, 그것은 반환
이getenv('TEST_VARIABLE') =
getenv('REDIRECT_TEST_VARIABLE') =
것들 내가 배제했습니다
mod_env
이 호스트에 의해 활성화/설치되어 있지 않습니다. 수 없다. 왜냐하면SetEnv
이 인식되지 않을 것이고 .htaccess를 처리하는 동안 500을 얻게 될 것이기 때문이다.AllowOverrides
httpd.conf
에는FileInfo
이 포함되지 않습니다. 수 없다면, 아파치는SetEnv
지시어를 만나면 "SetEnv not allowed here"라는 오류를 던져서 다시 500을 얻게 될 것이기 때문입니다.variables_order
의 'php.ini'에는 'E'가 포함되지 않습니다. 이 경우$_ENV
superglobal이 비어있는 것으로 설명되지만 (이유는 없습니다)getenv()
이이 변수에 대한 값을 반환하지 않습니다.전체 환경이 엉망입니다.
getenv('PATH')
및getenv('SERVER_NAME')
이 여전히 올바른 값을 반환하기 때문에 사용할 수 없습니다.
이 시점에서 나는 어떤 구성이이 문제를 일으킬 수 있는지에 대해 망설였습니다.
SetEnv _is_ .htaccess 명령,하지만 당신은 못했습니다 : 일단 내가 변수 앞에 HTTP_ 접두사, 모든 것이 효과가있다. 그 요구 사항이 이상한 "공식"소스에 문서화되어있는 것을 보지 못했지만 작동하는 경우 만지지는 않습니다. 맞습니까? – nitwit
일부 서버에서는 RewriteRule. * - (E = HTTP_VAR : VAL)과 동일한 요구 사항이 적용됩니다. – Chris
이 문제가 발생하여 어디서나 문서화되지 않은 것이 이상합니다. 필자의 경우 PHP 스크립트에서는 발생하지 않지만 Perl에서는 발생합니다. – insaner