![如果不包含字符串,则 htaccess 允许](https://linux22.com/image/512315/%E5%A6%82%E6%9E%9C%E4%B8%8D%E5%8C%85%E5%90%AB%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8C%E5%88%99%20htaccess%20%E5%85%81%E8%AE%B8.png)
我正在尝试设置一个 .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