我正在尝试设置一个 .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
有任何想法吗?
答案1
您几乎已经完成了,以下几点:
您的正则表达式虽然有效,但当预览 URL 中的其他地方时也会匹配(例如 test.preview.example.com)。以下内容仅当 URL 以“preview”开头时才匹配。
SetEnvIfNoCase Host ^preview\. preview_site
顺序需要改为“Allow,Deny”,因为您希望当 Deny 和 Allow 语句都匹配时 mod_access 会失败。mod_access 失败后,会因为“Satify Any”而调用 mod_auth。
所以这应该提供您正在寻找的行为:
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