apache - 匹配查询的 Apache 重写条件
问题描述
当查询包含不在我的“白名单”字符类中的字符时,我需要一个重写条件来返回例如 403。查询以 q= 开头,所以我的尝试是:
RewriteCond %{REQUEST_URI} ^/generic/
RewriteCond %{REQUEST_METHOD} ^GET$
RewriteCond %{QUERY_STRING} q=[^a-z]+
RewriteRule .* - [F]
它几乎可以工作。唯一的问题是,当查询以“a”开头时,任何后面的黑名单字符都不会触发规则
例子:
q=abc -> rule does not match -> fine
q=Abc -> rule matches -> fine
q=abC -> rule does not match -> not fine
因此,当禁止字符不是“q=”之后的第一个字符时,该规则不起作用。
我错过了什么?有人能帮我吗?
BR
解决方案
通过您显示的尝试,请尝试遵循 htaccess 规则文件。这里有 2 个要点,第 1 点你可以^
在.*
最后的禁止规则中使用。第二个是你需要用NC
覆盖小写来匹配正则表达式中的大小写字母。
RewriteCond %{REQUEST_URI} ^/generic/ [NC]
RewriteCond %{REQUEST_METHOD} ^GET$ [NC]
RewriteCond %{QUERY_STRING} q=[^a-z]+ [NC]
RewriteRule ^ - [F]
或者使用以下规则来匹配精确的查询字符串使用^
和$
锚点来匹配精确的查询字符串值:
RewriteCond %{REQUEST_URI} ^/generic/ [NC]
RewriteCond %{REQUEST_METHOD} ^GET$ [NC]
RewriteCond %{QUERY_STRING} ^q=[^a-z]+$ [NC]
RewriteRule ^ - [F]
推荐阅读
- android - 我正在尝试在 Android Native Activity 中使用 opengles 绘制形状。但是没有画出来
- kubernetes - K3S:如何通过 hub.docker.com 进行身份验证也拉取私有图像?
- javascript - 使用 MVC 的 JQueryFullCalendar
- xcode - 在 Xcode 12 中运行签名后脚本
- javascript - 获取相对于旋转 div 上 div 浏览器窗口的 x 和 y
- java - java.lang.Error:从 assets 文件夹中复制 SQLite 数据库中的数据库时出错
- java - 在 Eclipse 插件中加密敏感数据
- salesforce - Salesforce 沙盒中不提供社区选项
- javascript - 在 json api 请求中附加我自己的 json
- sql - IN SQL INNER JOIN 可以添加两个不同列的表吗?