我已经安装了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]
。
答案 0 :(得分:0)
我今天一直在为此苦苦挣扎,我想我已经找到了。
修饰符“ <”和“>”可用于已在内部重定向的请求,以选择应查询原始请求还是最终(分别)请求。
答案:%<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: []
%U
的话,不会压缩到?
。可以对其中的一个进行硬编码,但是对于没有查询的请求,您会看到/file.ext?-
很丑。因此,%U%<q
,或者在我的情况下为%{Host}i%U%<q
,因为我想查看使用了哪个域名,因为我有多个指向同一站点。