How to log the URL scheme (http / https) in Apache?
nginx has the $scheme
variable usable in its log_format
lines.
%H
is the request protocol (e.g. "HTTP/1.1").
How can I do the same with Apache?
Solution 1:
This works for me with Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
is only available when mod_ssl is loaded, see: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Solution 2:
One way to do it is to have two conditional CustomLog
directives, controlled by whether the HTTPS
variable is set.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
I have also tried using SetEnvIf
in the following manner, but it doesn't work (it logs -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
Solution 3:
For some reason I could not get the examples above to work, so found another way: you can add 2 rewrite rules into your configuration as follows:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Then add this into your LogFormat definition.
scheme=\"%{SCHEME}e\"