![Apache mod 重写以阻止 xhr 请求](https://linux22.com/image/672643/Apache%20mod%20%E9%87%8D%E5%86%99%E4%BB%A5%E9%98%BB%E6%AD%A2%20xhr%20%E8%AF%B7%E6%B1%82.png)
我观察到 xhr 请求被重定向到 oauth 服务器是一件坏事(因为它是一个机器人,它无法响应请求)。而且似乎响应是针对人的响应,因此重定向如下所示:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
我想要失败的请求(给出 407,但实际上 403 也可以)如下所示:
Accept:*/* (star slash star)
因此,我想要做的是重定向第一个标头接受,并重定向第二个标头 407(如果更简单,则重定向为 403)。我编写了一条规则,但它似乎与我的预期相反:
RewriteEngine On
RewriteCond %{HTTP:Accept} ^(text/html+)$
RewriteRule ^ - [F,L]
这样我就可以通过,但如果我在插入符号前面粘贴一个!,如下所示:
RewriteCond %{HTTP:Accept} !^(text/html+)$
它给了我一个禁止访问 (403)。我的预期是底部的规则会允许我进入,因为我的 Accept 中有文本/html,而第二个规则不应该允许。然而,我观察到的是,顶部的规则让我通过,而底部的规则却抛出了 403。我的理解是倒退的还是这不是解决问题的正确方法?Ubuntu 15.10,Apache 2.4.12
非常感谢。
答案1
是的,我的理解是倒退的。这可能也不是一个好问题。本质上是起作用的规则,即最上面的规则
RewriteCond %{HTTP:Accept} ^(text/html+)$
意思是:匹配这个表达式。如果我在它前面加上 ! 或 Not,它当然会忽略其中包含的所有内容。