我需要从普通的htaccess基本认证保护中排除一个URL(或者更好的是一个前缀)。比如/callbacks/myBank
或/callbacks/.*
你有什么提示吗?
我不想知道如何排除一个文件。这必须是url(因为这是基于PHP框架的解决方案,所有的url都被mod_rewrite
重定向到index.php
)。所以这个URL下没有文件。什么都没有。
其中一些URL只是来自其他服务的回调(没有IP是未知的,所以我不能根据IP排除),他们不能提示用户/密码。
电流定义简单如:
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd
require valid-user
9条答案
按热度按时间dy2hfwbg1#
使用SetEnvIf,您可以在请求以某个路径开始时创建一个变量,然后使用
Satisfy Any
指令来避免登录。指令的allow/deny块表示拒绝 EVERYONE 的访问,除非存在 valid-user(成功的BASIC身份验证登录)或设置了
noauth
变量。0dxa2lsx2#
如果您使用的是Apache 2.4,则不再需要
SetEnvIf
和mod_rewrite解决方法,因为Require
指令能够直接解释表达式:Apache 2.4将没有被
<RequireAll>
分组的Require
指令视为<RequireAny>
,这相当于一个“or”语句。下面是一个更复杂的例子,演示如何将请求URI和查询字符串匹配在一起,并返回到要求有效用户:此示例将允许访问
/callbacks/foo?secret_var=42
,但需要/callbacks/foo
的用户名和密码。请记住,除非您使用
<RequireAll>
,否则Apache将尝试按顺序匹配每个Require
,因此请考虑您希望首先允许哪些条件。Require
指示词的指涉如下:https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireexpr
会话参考如下:https://httpd.apache.org/docs/2.4/expr.htmlkiayqfof3#
这个解决方案工作得很好,你只需要定义你想通过的白名单。
8gsdolmq4#
我尝试了其他的解决方案,但这是对我有效的。希望它能对其他人有所帮助。
这将允许API url和
/index.php/api/
之后的任何url字符串无需登录即可打开,并且系统将提示登录其他任何字符串。示例:
mywebsite.com/index.php/api
将打开而不提示登录mywebsite.com/index.php/api/soap/?wsdl=1
将打开而不提示登录mywebsite.com
将提示先登录gywdnpxw5#
rvpgvaaj6#
另一种方法是这样的,如果你要保护的区域有一个单一的PHP脚本来控制一切,比如Wordpress。在另一个目录中设置Authentication with。在那里放置一个index.php,在路径'/'上设置一个cookie。然后在Wordpress中(例如),检查cookie,但是如果$_SERVER ['REQUEST_URI']是被排除的URL,则跳过检查。
在我的共享主机平台上,RewriteRule无法设置与“Satisfy any”一起工作的环境变量。
使用任何方法时,都要注意您所保护的页面不包含图像、样式表等,这些内容会在页面本身不包含时触发身份验证请求。
0pizxfdo7#
将下面的代码添加到您的根htaccess文件中,不要忘记更改您的管理url,.htpasswd文件页。
在根文件夹中创建.htpasswd文件,并在下面添加用户名和密码(设置默认用户名:admin和密码:管理员123)
请让我知道,如果你仍然面临任何问题。
ojsjcaue8#
为什么不直接使用基本的身份验证呢?
c2e8gylq9#
这些都不适用于我的Apache 2.4,因为我的PHP/Laravel htaccess做了一个重写,并将Request_URI更改为总是
/index.php
。我使用
Require expr %{THE_REQUEST}
来获取HTTP请求(THE_REQUEST)的第一行,它保持不变。例如,“GET /回调HTTP/1.1”
这对我很有效:
请注意,如果需要或允许两者,则需要将GET更改为POST:
有关需要表达式的详细信息