apache条件语句 – 处理顺序是什么?

我尝试使用.htaccess文件configuration通过http auth来保护对子目录的访问。

这是我的情况下apache 2.4完整的工作代码。

# Conditionally set environment variable BACKEND_PROTECTION (version for apache 2.4) <If "%{HTTP_HOST} == 'www.somedomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION </If> <If "%{HTTP_HOST} == 'www.someotherdomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION </If> <RequireAny> <RequireAll> Require not env BACKEND_PROTECTION Require all granted </RequireAll> <RequireAll> AuthType Basic AuthName "Protected URI" AuthUserFile /var/www/config/.htpasswd Require valid-user </RequireAll> </RequireAny> 

现在我需要另外从authentication中排除该目录的子目录,所以这是我的尝试。

 <If "%{HTTP_HOST} == 'www.somedomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION </If> <If "%{HTTP_HOST} == 'www.someotherdomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION </If> # disable protection for backend files loaded in frontend SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION 

但是这不起作用,在这个代码之后,以下的<RequireAny>块会触发httpauthentication,就好像BACKEND_PROTECTION被stil设置一样。 但是,如果我把否定内<If></If>它按预期工作。

 <If "%{HTTP_HOST} == 'www.somedomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION </If> <If "%{HTTP_HOST} == 'www.someotherdomain.de'"> SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION </If> 

为什么这样? If-Documentation下面的陈述究竟意味着什么?

说明:包含只有在运行时的请求满足条件时才应用的指令

在相同的运行时期间,其他代码是不是在.htacces中处理的? 或者只是在某种预编译步骤的运行时的早期阶段?