Apache:如何重写之前的LogFormat原始查询字符串

时间:2019-05-21 18:03:04

标签: apache mod-rewrite

我已经安装了mod_rewrite并且工作正常,因此/screens/myScreen/myAction?id=123被重写为(大约)/actions/screen.php?scr=myScreen&cmd=myAction&id=123

我正在尝试自定义apache日志,以便它们仅包含我真正需要的内容,并且格式易于解析。我想记录原始网址路径(/ screens / myScreen / myAction)和原始查询字符串(id = 123)。

我尝试了在docs中找到的选项:

%U 效果很好,并记录了/screens/myScreen/myAction

但是,%q 不是记录?id=123,而是记录?scr=myScreen&cmd=myAction&id=123(改写后的查询字符串 原来的一个)。

我找到的最接近的是%r ,但它包括方法,协议和所有类似GET /screens/myScreen/myAction?id=123 HTTP/1.1

的内容

有没有办法只获取原始的id=123

万一重要,这是我使用的重写规则:

RewriteRule  ^screens/([a-zA-Z0-9_]+)/([a-zA-Z]+)$ /fx/actions/screen.php?_scr=$1&_cmd=$2 [QSA,L]

1 个答案:

答案 0 :(得分:0)

我今天一直在为此苦苦挣扎,我想我已经找到了。

From the docs

  

修饰符“ <”和“>”可用于已在内部重定向的请求,以选择应查询原始请求还是最终(分别)请求。

答案:%<q

测试各种选项:

COLUMN 1                                  COLUMN 2                COLUMN 3                               COLUMN 4                                  COLUMN 5          COLUMN 6          COLUMN 7
%r: [GET /nothing.php?key=val HTTP/1.1]   %U: [/nothing.php]      %{REDIRECT_QUERY_STRING}e: [key=val]   %{REQUEST_URI}e: [/nothing.php?key=val]   %q: [?code=404]   %>q: [?code=404]   %<q: [?key=val]
%r: [GET / HTTP/1.1]                      %U: [/index.html]       %{REDIRECT_QUERY_STRING}e: [-]         %{REQUEST_URI}e: [-]                      %q: []            %>q: []            %<q: []
%r: [GET /common/.css HTTP/1.1]           %U: [/common/.css]      %{REDIRECT_QUERY_STRING}e: [-]         %{REQUEST_URI}e: [-]                      %q: []            %>q: []            %<q: []
%r: [GET /custom/.css HTTP/1.1]           %U: [/custom/.css]      %{REDIRECT_QUERY_STRING}e: [-]         %{REQUEST_URI}e: [-]                      %q: []            %>q: []            %<q: []
%r: [GET /background.jpg HTTP/1.1]        %U: [/background.jpg]   %{REDIRECT_QUERY_STRING}e: [-]         %{REQUEST_URI}e: [/background.jpg]        %q: [?code=404]   %>q: [?code=404]   %<q: []
%r: [GET /favicon.ico HTTP/1.1]           %U: [/favicon.ico]      %{REDIRECT_QUERY_STRING}e: [-]         %{REQUEST_URI}e: [-]                      %q: []            %>q: []            %<q: []
  • 您已经熟悉的第1、2和5列。
  • 第3列 可以作为一个单独的列使用,但是如果没有%U的话,不会压缩到?。可以对其中的一个进行硬编码,但是对于没有查询的请求,您会看到/file.ext?-很丑。
  • 第4列非常适合具有查询参数的请求,但如果没有则完全失败。
  • 第6列似乎与第5列匹配。
  • 第7栏是金钱。

因此,%U%<q,或者在我的情况下为%{Host}i%U%<q,因为我想查看使用了哪个域名,因为我有多个指向同一站点。