使用特定标题限制对 Apache 网站的访问

Han*_*ier 3 apache-2.4

如果传输具有特定值(测试)的特定标头(身份验证令牌),我只想让我的网站可访问。为此,我已经创建了一个 .htaccess 文件并向其中添加了较低的代码。

问题是,即使给出了相应的标题,也根本无法访问该网站。它也说我没有访问此服务器的权限。

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

RewriteEngine on
RewriteCond %{HTTP:auth-token} ^test$
RewriteRule .? - [E=headerok]

Order allow,deny
Deny from all
Allow from env=headerok
Run Code Online (Sandbox Code Playgroud)

这是 Chrome 开发者控制台的响应:

Chrome 开发者控制台标头

我知道这种保护并不真正安全,但对我而言,这已经足够了。

有人可以帮我解决这个问题吗?

Dav*_*man 5

如果您使用的是 apache 2.4,您应该考虑使用 new ( Require) 访问控制方法而不是 2.0/2.2 ( Allow/ Deny) 方法。2.4 目前提供了一个向后兼容模块,但我希望它会在某个时候消失。

Apache的2.4访问控制文件建议你应该能够做到这一点:

<If "%{HTTP:auth-token} in { 'test' }">
    Require all granted
</If>
<Else>
    Require all denied
</Else>
Run Code Online (Sandbox Code Playgroud)

该页面上还有一个使用 mod_rewrite 的示例,它与问题中的方法更相似,但是:

<If>在 2.4 中添加的指令取代了 mod_rewrite 传统上用来做的许多事情,在诉诸 mod_rewrite 之前,您可能应该先看看那里。

  • 谢谢你的帮助。使用以下代码,它按照我想象的方式工作。`&lt;If "%{HTTP:auth-token} in { 'test' }"&gt; 要求所有被授予 &lt;/If&gt; &lt;Else&gt; 要求所有被拒绝 &lt;/Else&gt;` (3认同)