2013-05-09 25 views
1

上午,的.htaccess和環境變量(做X,如果信封心不是)

我有2項在我的.htaccess文件,我想給他們多一點活力。

首先,我有一個非www到www。重定向

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 

但是,我想它下面

<IfModule mod_rewrite.c> 
    RewriteCond %{ENV:environment} != "dev" && != "local" 
    RewriteCond %{HTTP_HOST} {DOESNT_CONTAIN .staging.com} 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 

所以基本上有條件的作用,我想了www。重定向如果env變量不等於開發或本地,並且域沒有.staging.com在其中

我將如何去排序呢?

其次,這是幾乎相同的問題,我有一些認證

Order deny,allow 
Deny from all 
AuthType Basic 
AuthUserFile /var/www/vhosts/{HTTP_HOST}/httpdocs/.htpasswd 
AuthName "Protected Area" 
require valid-user 
Allow from 127.0.0.1 
Satisfy Any 

我想這隻能在相同的條件之上,從而運行: 環境=「本地」 環境!=「開發」 網址不包含.staging.com

希望你們中的一些人可以解決這個問題,請。

非常感謝!

回答

3

對於mod_rewrite的部分:

RewriteCond %{ENV:environment} != "dev" && != "local" 
RewriteCond %{HTTP_HOST} {DOESNT_CONTAIN .staging.com} 

將成爲:

RewriteCond %{ENV:environment} !dev 
RewriteCond %{ENV:environment} !local 
RewriteCond %{HTTP_HOST} !\.staging\.com 

對於部分的mod_auth,你需要設置一個環境變量的主機和開發/地方:

SetEnvIfNoCase Host .staging.com noauth=true 
SetEnvIf environment dev noauth=true 
SetEnvIf environment local noauth=true 

然後添加其他Allow聲明:

Allow from env=noauth 
+0

你能解釋一下「SetEnvIfNoCase Host .staging.com noauth = true」在做什麼,不太明白嗎? – Owen 2013-05-09 20:07:10

+0

@OwenMelbourne查看[mod_setenvif](http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif)文檔。它設置了一個環境變量,並且由於'Allow from env'只檢查環境變量**是否存在**,所以您必須使用'SetEnvIf'來檢查'environment'變量的值。 – 2013-05-09 21:09:17