我已经Basic Auth
为浏览器身份验证设置了一个 Opencart 项目,以仅允许访问相关用户。现在,I need to use REST API for a mobile app
. 当我从 API 调用端点以从 Opnecart 项目获取一些详细信息时,它需要从 API 生成 access_token,并且通过在每个请求中使用该 access_token,我可以从 API 获取详细信息。问题是我为项目设置的基本身份验证,因此我无法访问 API,因为我只能使用 1 种方法访问 API,即 GET 方法从 opencart 获取详细信息,我不能使用 2 种方法,即Auth Header and GET methods
. 所以,what I am trying to do is to disable Basic Auth if the Request_URI includes api calls.
到目前为止,我对项目的 vhost 所做的尝试如下,但这一切都没有奏效。
从以下问题的已接受答案中得到了这个想法,但它并没有为我锻炼。 https://stackoverflow.com/questions/8978080/htaccess-exclude-one-url-from-basic-auth?answertab=votes#tab-top
<Directory /var/www/html/projectexample>
AllowOverride All
# Auth stuff
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Order allow,deny
Deny from all
Satisfy any
<RequireAny>
<RequireAll>
Require expr %{REQUEST_URI} =~ m#^/api/rest/.*#
</RequireAll>
Require valid-user
</RequireAny>
</Directory>
我也尝试过使用 SetEnvIf 环境变量,如下所示,但它也没有锻炼。
<Directory /var/www/html/projectexample>
AllowOverride All
# Auth stuff
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
SetEnvIf Request_URI "^/api/*" allow=1
#SetEnvIf Request_URI "^/(api/*)" allow=1
Order allow,deny
Require valid-user
Allow from env=allow
Deny from env!=allow
Satisfy any
</Directory>
请问有什么解决办法吗?
因为我在我的项目中启用了 SEO URL,所以对我有用的解决方案:
Allow from env=REDIRECT_noauth
在这里为 SEO URLs 做伎俩。假设
/var/www/html/projectexample
您的文档根/var/www/html/projectexample/api
目录是您希望允许不受限制访问的 API 目录,那么您只需创建两个<Directory>
容器即可。例如:更具体
/api
<Directory>
的容器会覆盖前者。假设你使用的是 Apache 2.4+,你不应该混合旧的 Apache 2.2 auth 指令(
Order allow,deny
等等)和新的<RequireAny>
etc. 指令。旧指令仅可用于向后兼容。混合使用两种类型的指令可能会导致意外的冲突。