使用强制HTTPS解释Apache Access Log,Site

时间:2016-03-18 00:36:13

标签: apache .htaccess logging

在网站example.com上,我强制https在.htaccess

中使用以下内容
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

供应商应该将数据发布到https://www.example.com/membership/foobar.php,他们坚持认为他们正在使用https方案进行发布。

在日志中查找他们的IP总是遵循以下模式:

[17/Mar/2016:00:15:11 -0400] "POST /membership/foobar.php HTTP/1.1" 302 1165 731 "-" "-"   
[17/Mar/2016:00:15:11 -0400] "GET /membership/foobar.php HTTP/1.1" 200 743 2623 "-" "-"    

[17/Mar/2016:17:37:58 -0400] "POST /membership/foobar.php HTTP/1.1" 302 1179 731 "-" "-"
[17/Mar/2016:17:37:58 -0400] "GET /membership/foobar.php HTTP/1.1" 200 743 2623 "-" "-"

当我读到它时,它是一个接收302然后被解释为GET的POST,我认为这是由于htaccess重写了对http方案的请求,而不是https。

这是正确的解释吗?

1 个答案:

答案 0 :(得分:1)

除非您在此处未显示其他规则或代码,否则POST请求将在端口80上登陆并以302状态重定向。请记住,任何302/301在重定向后都会成为GET请求,会导致过程中丢失POST数据。

应该使用以下条件跳过对这些重定向的POST请求:

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,NE,L]