我们有一个受密码保护的drupal网站 private ICommand _showCommand;
public ICommand ShowCommand => _showCommand ?? (_showCommand = new Command(ButtonClickAction));
public void ButtonClickAction(object parameter)
{
//Your action
}
。但是,我希望所有a.com
URI都不是。所以我读过a.com/api/...
:
SetEnvIf
虽然AuthName "Stage"
AuthType Basic
AuthUserFile ~/.htpasswd
SetEnvIf Request_URI ".*data_sheets.*\.pdf" noauth
SetEnvIf Request_URI "/api/.+" noauth
SetEnvIfNoCase Request_Method OPTIONS noauth
Order Deny,Allow
Deny from all
Require valid-user
Allow from env=noauth
Satisfy Any
URI仍然要求输入密码。由于它是一个Drupal网站,在anubhava的帮助下,我们认为它与index.php处理请求的方式有关。
如何处理?
修改
添加
/api/foobar
之后
RewriteCond %{REQUEST_URI} ^/api/ [NC]
RewriteRule ^ - [E=noauth]
没有帮助
答案 0 :(得分:2)
我迟到了两年,但我已经thorough explanation弄清了正在进行的事情以及如何解决它。简短版本:
RewriteRule由子请求实现。 SetEnvIf模块不会在子请求中继承REQUEST_URI变量。您的noauth变量最终在这些子请求中未定义。
将<Location>
和<LocationMatch>
块与mod_core的SetEnv
一起使用,而不是依赖于mod_setenvif。
答案 1 :(得分:1)
这对我有用:
i
答案 2 :(得分:1)
出于某种原因,我在 3 年后访问了这个问题,并试图发布一个适用于任何 Apache 版本的可行解决方案。
您可以在站点根目录 .htaccess 中使用 Drupal 规则尝试这些规则:
DirectoryIndex index.php
RewriteEngine on
# remove /index.php from URLs
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index\.php$ [NC]
RewriteRule ^ %1 [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
# allow anything that starts with /api/
SetEnvIfNoCase Request_URI ^/api/ noauth
<FilesMatch "^(?!index\.php$).*$">
AuthType Basic
AuthName "Stage"
AuthUserFile ~/.htpasswd
Require valid-user
Order Deny,Allow
Deny from all
Allow from env=noauth
Satisfy any
</FilesMatch>