2011-04-23 113 views
9

我在我的ubuntu homeserver上安裝了Zend。在我的.htaccess文件我有以下代碼:Zend SetEnv in .htaccess not working

SetEnv APPLICATION_ENV development 

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

,當我在我的公用文件夾的index.php呼應APPLICATION_ENV,APPLICATION_ENV未設置。

我在做什麼錯了?

在Apache中啓用了Mod重寫。

+1

你有mod_env您的服務器上啓用? – 2011-04-24 03:59:03

回答

16

爲了.htaccess文件中使用SETENV,我相信你需要設置...

AllowOverride FileInfo 

...的相關虛擬主機目錄塊內。 (然後按照慣例重新啓動httpd服務。)

此外,根據您如何運行PHP,它是可能這樣的信息被剝離。 (例如:suexec將有效地刪除所有非HTTP *環境變量。)

+2

AllowOverride All將允許它讀取整個.htaccess文件 – Ascherer 2011-04-25 19:46:27

+0

謝謝,這讓我看到我目前的服務器不允許這個,不幸的是... =/ – giovannipds 2017-03-04 15:14:14

4

我更喜歡將SetEnv放在本地服務器的httpd.conf文件中,以便我所有的本地ZF應用程序都以開發模式運行,我推送到階段服務器它有一個標誌設置環境分段,然後生產服務器沒有這樣的設置,所以它默認爲生產...

這樣我可以保持相同的.htaccess文件在源代碼管理當我將它推送到不同的服務器時,其行爲如預期。

middaparka是正確的suExec ... suExec阻止您在.htaccess文件中設置自定義環境變量 - 根據WebFaction論壇上的remi。

4

首先,你需要mod_env安裝(和mod_rewrite的)

如果Apache在裝載任何模塊(S)仔細檢查:

的apachectl -l的httpd -l

根據我認爲的操作系統分佈,該命令可能會有所不同。

對於.htaccess文件的工作你需要AllowOveride所有可以設置在不同的配置文件(和「部分」取決於你的操作系統配置Apache的方式。你最好的選擇是找出它是否是一個htaccess文件的問題或環境中的一個主要的配置文件的任何地方設置:。

SETENV TESTME foobar的

重新啓動Apache和PHP腳本回聲測試,如果你得到了它,調試的.htaccess

注1:限制你的虛擬主機的使用.htacess到您真正需要的文件夾或將配置移動到虛擬主機。注意2:如果您安裝了Apache mod_dir,您可能不需要所有這些重寫規則。看看它

+0

在我的Ubuntu機器上,** - l **開關顯示編譯成模塊。 ** - M **開關顯示_all_加載的模塊(這是我以爲你是在之後)。 – 2011-10-24 03:49:02

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

您還可以使用:

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

這對我來說是最簡單的解決方案,謝謝。 – 2017-09-08 21:55:44