2017-04-21 84 views
2

我正在通過php函數apache_setenv設置apache環境變量。如何將Apache環境變量傳遞給.htaccess中的url

apache_setenv("EXAMPLE_VAR", "Example Value"); 

但我在訪問中.htaccess這個變量的問題,我不能夠在反正裏面使用的.htaccess這個環境變量。但我可以通過php getenv()訪問它。

問題不僅僅是通過php設置變量我無法訪問由.htaccess本身設置的env變量。

我已經試過

假設環境變量是www.domain.com

RewriteEngine On 
RewriteCond ^(.*)$ test.php?id=%{ENV:VARIABLE} [L] 

&

RewriteEngine On 
RewriteCond %{ENV:VARIABLE} ^www.(.+) 
RewriteRule^test.php?id=%1 [L] 

與其他類似的測試只是驗證環境變量設置和運行。

Mod_env和mod_rewrite已打開。

+1

一個有趣的問題++ – anubhava

+1

父進程(Apache)完全不能訪問子進程中改變或設置環境變量( PHP)。 –

+0

mod_rewrite模塊完成運行後調用PHP模塊,因此在重寫規則中看不到通過PHP進行的更改。 – anubhava

回答

1

由於Apache的模塊加載順序,使用SetEnv指令的變量集看不到mod_rewrite。使用SetEnvIf,而不是這樣的:

SetEnvIf Host^VAR=/foo/bin 

然後在mod_rewrite規則中使用它:

RewriteEngine On 

RewriteCond %{ENV:VAR} =/foo/bin 
RewriteRule ^home/?$ /something [L,NC] 
+1

謝謝先生,我也從中得到了一些其他想法。 –

相關問題