在网站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。
这是正确的解释吗?
答案 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]