直接用 %{REQUEST_METHOD} 变量配合 RewriteCond 即可匹配请求方法,如 GET、POST、PUT、DELETE;支持严格匹配(^GET$)、多方法匹配(^(POST|PUT|DELETE)$)和取反排除(!^GET$),常用于禁止非 GET 访问静态资源、限制接口仅 POST、或对 HEAD 请求快速响应,该变量为 Apache 内置,无需额外模块,但需确保 mod_rewrite 启用且 AllowOverride FileInfo 或 RewriteEngine On 已配置。

直接用 %{REQUEST_METHOD} 变量配合 RewriteCond 即可匹配请求方法,比如 GET、POST、PUT、DELETE 等。
基本写法:匹配特定请求方法
Apache 的 RewriteCond 通过环境变量 %{REQUEST_METHOD} 获取当前请求的 HTTP 方法。该变量值为大写字符串(如 GET、POST),可直接用正则或字符串比较:
-
RewriteCond %{REQUEST_METHOD} ^GET$—— 严格匹配 GET -
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|DELETE)$—— 匹配多个方法 -
RewriteCond %{REQUEST_METHOD} !^GET$—— 排除 GET(感叹号表示取反)
常见用途示例
实际中常用于权限控制、API 路由或安全限制:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 禁止非 GET 请求访问静态资源:
RewriteCond %{REQUEST_METHOD} !^GET$<br>RewriteRule \.(js|css|png|jpg|gif)$ - [F] - 只允许 POST 访问某个接口:
RewriteCond %{REQUEST_METHOD} !^POST$<br>RewriteRule ^/api/submit$ - [R=405,L] - 重写前判断是否为 HEAD 请求(避免执行耗时逻辑):
RewriteCond %{REQUEST_METHOD} ^HEAD$<br>RewriteRule ^/data\.json$ /data.json [L]
注意点
%{REQUEST_METHOD} 是 Apache 内置变量,无需额外模块启用(mod_rewrite 已加载即可)。它反映的是原始请求方法,不受后续内部重写影响;也不等同于 %{THE_REQUEST}(后者是完整请求行,含路径和协议)。
如果在 .htaccess 中使用,确保 AllowOverride FileInfo 已启用;若在虚拟主机配置里,需确认 RewriteEngine On 已开启。

















