如何仅对不存在的文件应用Apache SetEnvIf指令?

如何仅对不存在的文件应用Apache SetEnvIf指令?,apache,.htaccess,mod-rewrite,setenv,Apache,.htaccess,Mod Rewrite,Setenv,我试图使用AuthUserFile限制对我的网站的访问,根路径除外 SetEnvIf Request_URI "^/$" allow_access=true Order Deny,Allow Deny from all Allow from env=allow_access 然而,当robots.txt等文件也受到保护时,我遇到了一个问题 由于某些原因,以下指令不起作用 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteC

我试图使用AuthUserFile限制对我的网站的访问,根路径除外

SetEnvIf Request_URI "^/$" allow_access=true

Order Deny,Allow
Deny from all
Allow from env=allow_access
然而,当robots.txt等文件也受到保护时,我遇到了一个问题

由于某些原因,以下指令不起作用

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* - [E=allow_access]

Order Deny,Allow
Deny from all
Allow from env=allow_access
除了主页(/)和实际存在的文件(如robots.txt和favicon.ico),是否有任何方法限制对/any/path/here/的访问


提前感谢您的帮助

这有点棘手,但是
mod_rewrite
mod_setenif
的组合可以工作:

RewriteEngine on

# if file or directory doesn't exist then forward to /deny
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ /deny [L]

# set env variable deny_access if URI is /deny
SetEnvIf Request_URI "^/deny$" deny_access

# block access if env variable deny_access is set
Order Allow,Deny
Allow from all
Deny from env=deny_access

使用和可以优雅地完成此操作


SetEnv允许访问
命令拒绝,允许
全盘否定
允许来自环境=允许访问

嗨!谢谢你的解决方案。然而,这在我的情况下不起作用。问题是vhost中有一个重写规则,它重写URI以查询index.php(用户友好URL的通常做法)。此时,我需要允许访问/和现有文件(如robots.txt),但需要拒绝访问/any/path/here/。这确实很棘手。这就是我需要Apache专家帮助的原因。:)你能发布你现有的规则吗?这样我就可以复制它,并为你提供更新的答案。请参考第二块(不起作用)。在发布我的答案之前,我已经看到了第二块。您提到了
vhost中有一个重写规则,它重写URI以查询index.php(用户友好URL的惯例)
我要求您发布该规则。
<If "-f %{REQUEST_FILENAME}">
  SetEnv allow_access
</If>

Order Deny,Allow
Deny from all
Allow from env=allow_access