11 Stimmen

Zend SetEnv in .htaccess funktioniert nicht

Ich habe Zend auf meinem Ubuntu-Heimserver installiert. In meiner .htaccess-Datei habe ich den folgenden Code:

SetEnv APPLICATION_ENV development

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

Wenn ich APPLICATION_ENV in meinem index.php im öffentlichen Ordner ausgeben lasse, ist APPLICATION_ENV nicht gesetzt.

Was mache ich falsch?

Mod Rewrite ist in Apache aktiviert.

18voto

John Parker Punkte 53226

Um SetEnv in einer .htaccess-Datei zu verwenden, müssen Sie meiner Meinung nach festlegen...

AllowOverride FileInfo

...innerhalb des entsprechenden virtualhost-Verzeichnisblocks. (Und starten Sie dann den httpd-Dienst wie gewohnt neu.)

Zusätzlich, je nachdem wie Sie PHP ausführen, ist es möglich, dass solche Informationen entfernt werden. (z.B.: suexec wird effektiv alle nicht-HTTP* Umgebungsvariablen entfernen.)

5voto

Zuerst müssen Sie mod_env (und mod_rewrite) installiert haben

Überprüfen Sie doppelt, ob Apache das Modul (s) geladen hat, entweder:

apachectl -l oder httpd -l

Der Befehl könnte je nach OS-Verteilung unterschiedlich sein.

Damit die .htaccess-Datei funktioniert, benötigen Sie AllowOveride All, das in verschiedenen Konfigurationsdateien (und "Teilen", abhängig davon, wie Ihr OS als Apache konfiguriert ist) eingestellt werden kann. Ihre beste Option ist herauszufinden, ob es sich um ein Problem mit der .htaccess-Datei oder mit der Umgebung handelt. Irgendwo in der Hauptkonfigurationsdatei einstellen:

SetEnv TESTME foobar

Starten Sie Apache neu und geben Sie TEST aus einem PHP-Skript aus. Wenn Sie es erhalten, debuggen Sie das .htaccess-File

Hinweis 1: Beschränken Sie in Ihrem Virtual Host die Verwendung von .htacess auf den Ordner, in dem Sie es wirklich benötigen, oder verschieben Sie die Konfigurationen in einen Virtual Host.

Hinweis 2: Sie benötigen wahrscheinlich nicht alle diese Umleitungsregeln, wenn Sie Apache mod_dir installiert haben. Schauen Sie es sich an

5voto

Kohjah Breese Punkte 3772

Sie können auch verwenden:

RewriteRule .* - [E=ENV_NAME_HERE:ENV_VALUE_HERE]

4voto

AntBrown Punkte 727

Ich ziehe es vor, SetEnv in der httpd.conf-Datei für den lokalen Server zu setzen, damit alle meine lokalen ZF-Anwendungen im Entwicklungsmodus laufen. Wenn ich dann auf den Staging-Server schiebe, wird die Umgebung auf Staging gesetzt. Auf dem Produktivserver gibt es keine solche Einstellung, sodass es auf Produktion zurückgesetzt wird...

So kann ich die gleiche .htaccess-Datei in der Versionsverwaltung behalten und wenn ich sie auf die verschiedenen Server übertrage, verhält sie sich wie erwartet.

middaparka hat recht mit suExec... suExec verhindert, dass Sie benutzerdefinierte Umgebungsvariablen in Ihrer .htaccess-Datei festlegen - laut remi im WebFaction-Forum.

4voto

Brandon Rohde Punkte 288

Wenn Sie Ihren Heimserver auf einem Mac betreiben oder suEXEC aktiviert haben, gibt es Sicherheitsmaßnahmen, um alle nicht-http Umgebungsvariablen zu entfernen, die definiert sind. Daher werden sie nicht in $_ENV['APPLICATION_ENV'] angezeigt. Sie können jedoch über eine PHP-Funktion auf diese zugreifen, um das Gleiche zu erreichen.

$var = apache_getenv('APPLICATION_ENV');

Sie könnten sogar die Umgebungsvariable innerhalb von PHP definieren, wenn Sie möchten, obwohl dies nicht empfohlen wird.

$_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV');

Ich habe eine nahezu identische Konfiguration wie Sie, und wir definieren einfach global:

define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV'));

Nachdem Sie das getan haben, sollte es wie gewünscht funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X