apache 默认通过 %r 占位符在访问日志中记录 http 方法(如 get、post),只要日志格式(如 combined)包含 %r,每条日志开头引号内即显示完整请求行,无需额外配置或模块。

Apache 默认就会记录客户端使用的 HTTP 方法(如 GET、POST、PUT、DELETE 等),它体现在访问日志(access log)的请求行字段中,无需额外开启。关键在于你是否使用了能包含 %r(即完整的请求行)的日志格式。
确认日志格式含 %r
%r
%r 是 Apache 日志格式中表示「请求行」的占位符,形如:"GET /index.html HTTP/1.1" 或 "POST /login.php HTTP/1.1"
默认的 common 和 combined 格式都已包含 %r:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
✅ 只要你的 CustomLog 指令引用的是含 %r 的格式(如 combined),日志中每条记录开头的引号内就一定有方法名(GET/POST等)。
查看日志中实际效果
一条典型日志行如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
192.168.1.100 - - [14/June/2026:10:25:33 +0800] "POST /api/submit HTTP/1.1" 200 124 "-" "Mozilla/5.0"
其中 "POST /api/submit HTTP/1.1" 就是 %r 展开的结果 —— 方法名清晰可见。
如果你看到的是空引号 "" 或缺失该字段,说明日志格式没配对,或请求被异常截断(如超大 header、连接提前关闭)。
自定义格式时务必保留 %r
%r
若你定义了自己的 LogFormat,请确保包含 %r:
# ✅ 正确:包含请求行
LogFormat "%t %h \"%r\" %>s %B %{User-Agent}i" myformat
CustomLog logs/my_access.log myformat
# ❌ 错误:没有 %r,就看不到 GET/POST
LogFormat "%h %t %>s %B" minimal_format
⚠️ 注意:仅靠
%m(单独记录方法)也能提取 HTTP 方法,但%m不是独立字段,必须配合其他字段使用,且不推荐替代%r—— 因为%r提供上下文(路径+协议),更完整、更可靠。
验证配置是否生效
- 修改配置后,执行
sudo apachectl configtest(或apache2ctl configtest)检查语法 - 重启服务:
sudo systemctl restart apache2(Debian/Ubuntu)或sudo systemctl restart httpd(RHEL/CentOS) - 发起一次
GET和一次POST请求(例如用curl -X GET http://localhost/和curl -X POST http://localhost/) - 查看
access_log,确认两行均以"GET ..."和"POST ..."开头
不需要启用 mod_dumpio、不需改 LogLevel、也不依赖 mod_security —— 记录 HTTP 方法是 Apache 访问日志最基础的能力,开箱即用。









