我有几个网站:example.com
,example1.com
和example2.com
。所有这些都指向我的服务器的/public_html
文件夹,这是我的Apache根文件夹。
只有当用户来自.htaccess
时,我才需要添加到example2.com
文件中才能使用http身份验证? example.com
和example1.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;块中执行)。有什么想法吗?
答案 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.com
,dev.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/*
中的正确配置文件中。