如果不包含string,htaccess允许

我试图设置.htaccess文件,这将允许用户绕过密码块,如果他们来自一个不以预览开始的域。 例如http://preview.example.com会触发密码,而http://example.com则不会。

这是迄今为止我所得到的:

SetEnvIfNoCase Host preview(.*\.)? preview_site AuthUserFile /Users/me/.htpasswd AuthGroupFile /dev/null AuthType Basic AuthName "Development Area" Require valid-user Order deny,allow Allow from 127 deny from env=preview_site Satisfy any 

有任何想法吗?

你几乎在那里,几点:

您的正则expression式虽然有效,但也可以在URL中的其他位置(例如test.preview.example.com)进行预览时匹配。 如果url以“预览”开头,则以下内容仅相匹配。

 SetEnvIfNoCase Host ^preview\. preview_site 

该命令需要更改为“允许,拒绝”,因为您希望mod_access在拒绝和允许语句匹配时失败。 mod_access失败后,将调用mod_auth,因为“Satify Any”。

所以这应该提供你正在寻找的行为:

 SetEnvIfNoCase Host ^preview\. preview_site AuthUserFile /Users/me/.htpasswd AuthGroupFile /dev/null AuthType Basic AuthName "Development Area" Require valid-user Order Allow,Deny Allow from All Deny from env=preview_site Satisfy Any