仅在访问特定域时才使用HTTP Auth

时间:2009-08-31 21:19:01

标签: apache authentication .htaccess

我有几个网站:example.comexample1.comexample2.com。所有这些都指向我的服务器的/public_html文件夹,这是我的Apache根文件夹。

只有当用户来自.htaccess时,我才需要添加到example2.com文件中才能使用http身份验证? example.comexample1.com不应使用身份验证。

我知道我需要像

这样的东西
AuthType Basic
AuthName "Password Required"
AuthUserFile "/path/to/.htpasswd"
Require valid-user

但我只想在用户访问example2.com时要求输入密码。

修改

使用答案中建议的方法,我的.htaccess文件中包含以下内容:

SetEnvIfNoCase Host ^(.*)$ testauth
<IfDefine testauth>
RewriteRule ^(.*)$ index2.php?q=$1 [L,QSA]
</IfDefine>

我知道mod_setenvif.c模块已启用(我使用&lt; IfModule&gt;块验证),但似乎“testauth”永远不会被定义,因为我的测试要验证(重定向到index2.php)没有执行(而是在我的&lt; IfModule&gt;块中执行)。有什么想法吗?

5 个答案:

答案 0 :(得分:19)

文档根目录中的htaccess文件中的内容如何:

# set the "require_auth" var if Host ends with "example2.com"
SetEnvIfNoCase Host example2\.com$ require_auth=true

# Auth stuff
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
AuthType Basic

# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is NOT set
Allow from env=!require_auth

除非主机以example2.com结尾(例如www.example2.comdev.example2.com等),否则不需要进行身份验证。如果需要,可以调整表达式。任何其他主机都将导致require_auth var无法设置,因此身份验证。如果需要相反,最后一行可以更改为:Allow from env=require_auth,删除

答案 1 :(得分:10)

Apache 2.4提供了If指令的语义替代方法:

<If "req('Host') == 'example2.com'">
    AuthUserFile /path/to/htpasswd
    AuthType Basic
    AuthName "Password Protected"
    Require valid-user
</If>
<Else>
    Require all granted
</Else>

答案 2 :(得分:5)

以下是一项建议:

创建名为common.conf的文件并保存在可访问的位置

在此文件中,将Apache配置放在所有站点(主机)上。

删除当前单个VirtualHost条目,替换为VirtualHost条目,如下所示:

# These are the password protected hosts
<VirtualHost *:80>
ServerName example.com
ServerAlias example1.com

Include /path-to-common-configuration/common.conf

AuthType Basic
AuthName "Password Required"
AuthUserFile "/path/to/.htpasswd"
Require valid-user
</VirtualHost>

# These are hosts not requiring authentication
<VirtualHost *:80>
ServerName example2.com
ServerAlias example3.com

Include /path-to-common-configuration/common.conf

</VirtualHost>

答案 3 :(得分:2)

我想知道DanH是否可以通过允许按IP地址访问的方法获得帮助?

这样的东西
SetEnvIf Remote_Addr 1\.2\.3\.4 AllowMeIn
SetEnvIfNoCase Host this\.host\.is\.ok\.com AllowMeIn
SetEnvIfNoCase Host this\.host\.is\.also\.ok\.com AllowMeIn

然后在你的Drupal&#34;容器&#34;

Order Allow,Deny
Allow from env=AllowMeIn

应该这样做。

任何&#34;直播&#34;应配置为&#34; AllowMeIn&#34;,否则您必须来自已知的IP地址(即您和其他开发人员)。

答案 4 :(得分:1)

您不应该将per-vhost配置放入.htaccess。而是将Virtual Block中的配置块放在/etc/apache/sites-enabled/*中的正确配置文件中。