我的网站默认需要https,因此我使用此.htaccess代码将所有http流量重定向到https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
一切都很好,除了网站收到许多POST请求到达旧的http://地址,而POST数据在使用301时丢失。我不能阻止POST请求来到旧的http://地址,因为它们来自基于PHP的脚本(安装在客户端'服务器上),因此我唯一可能的选项似乎是307或308重定向(因为它们保持POST数据)。
但是,重定向307被认为是临时的,而我打算永久使用https,所以它似乎不是最佳选择?当然,我可以使用308,但这个似乎是" new"并且并非所有浏览器都支持(根据我在stackoverflow上发现的许多评论)。也许有人知道在.htaccess中使用更好的重写规则?
P.S。我知道最好的想法是默认使用301重定向和修改脚本将数据发布到https(我已经这样做了),但是可能需要很长时间,而所有客户端都会在他们的服务器上更新脚本,为什么还需要另一种解决方法。
答案 0 :(得分:0)
保留301,将条件更改为:
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_METHOD} !=POST
如果客户的旧脚本使用任何其他方法,则必须更改第二个条件以包含它,例如:
RewriteCond %{REQUEST_METHOD} !^(?:POST|PUT)$
正常请求/抓取将始终以GET
或HEAD
开头,因此强制使用https,因此后续请求也将使用它。确保您网站内容中的所有网址都是相对或相对的。