htaccess中的域名特定代码块

时间:2010-11-01 12:47:48

标签: .htaccess

我们有本地服务器,中央开发,登台和生产服务器。但是,由于显而易见的原因,dev和staging受密码保护。因此,在对htaccess进行任何更改后,我必须手动编辑htaccess文件,以便在开发和登台服务器上启用密码保护。

有没有办法让基于域名的条件块如下:

if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){
  AuthName "Password Protected Area"
  AuthType Basic
  AuthUserFile /somewhere/.htpasswd
  Require valid-user
}

我需要找到相当于条件的htaccess:

if ( $domain == "dev.example.com" || $domain == "staging.example.com" ){

}

我很感激你们给予的任何帮助或指示。

3 个答案:

答案 0 :(得分:30)

虽然通过VirtualHost而不是.htaccess做得更好,但如果setenvif模块处于活动状态,您可以使用以下解决方案:

SetEnvIf Host ^dev\.site\.com$ is_on_dev_site
SetEnvIf Host ^staging\.site\.com$ is_on_dev_site
Order deny,allow
Deny from env=is_on_dev_site
# require password if access would otherwise be denied
Satisfy any
# Put your password auth stuff here

您也可以使用白名单来实现,这可能会更好,因为它确保您的开发网站仍然受到保护,即使有人决定允许通过www.dev.site.com等访问它们:

SetEnvIf Host ^site\.com$ is_on_public_site
SetEnvIf Host ^www\.site\.com$ is_on_public_site
Order deny,allow
Deny from all
Allow from env=is_on_public_site
Satisfy any
# Put your password auth stuff here

如果您的服务器上没有mod_setenvif,mod_rewrite也可以为您完成工作(用以下内容替换白名单示例中的SetEnvIf块):

RewriteEngine On
RewriteCond %{HTTP_HOST} =site.com
RewriteRule ^ - [E=is_on_public_site:yes]
RewriteCond %{HTTP_HOST} =www.site.com
RewriteRule ^ - [E=is_on_public_site:yes]

答案 1 :(得分:5)

我找到了一个很好的解决方案,以区分“localhost”和“live”:

由于htaccess的条件有限,为什么不满足于IfModule?:比较你拥有的模块(即使用,并寻找一个重要的,希望长期的差异,例如,如果你在Windows上开发并在linux上部署mod_win32 .c可能会很好。(不要忘记添加phpinfo()省略的.c。)

然后你就可以这样(测试过):

<IfModule mod_win32.c> 
    RewriteRule ^banana$ test.php?dudeThisIsLocal=1
</IfModule>
<IfModule !mod_win32.c> 
    RewriteRule ^banana$ test.php?dudeThisIsLive=1
</IfModule>

这个例子是一个很好的理智测试,浏览你的域名/香蕉分配。 localhost / banana如果你(启用了重写)在test.php中转储$ _GET数组。如果这样可行,请使用真实的配置语句填充代码叉。

答案 2 :(得分:1)

您应该在您的网站配置文件中执行以下操作:

<VirtualHost domain.com:80>

...config statements here

</VirtualHost>

<VirtualHost domain2.com:80>

....config statements here

</VirtualHost>

如果您的主持人不允许您编辑您的网站配置文件,如果您使用的是共享主机,那么这是真的可能,那么您应该考虑使用VPS或专用主机。