由于某些原因SSL限制HTTP1.0请求和/或限制某些HTTP谓词不能正常工作

时间:2017-05-18 19:19:34

标签: .htaccess ssl

在我的.htaccess文件中

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80
#RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC]
#RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

如果我想使用

RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC]
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]

但如果我尝试使用这些SSL,则无法正常工作,如果我删除这两行,SSL工作正常。我怎么能解决这个问题。

1 个答案:

答案 0 :(得分:0)

我相信你遇到的问题是它只运行一个条件并因为你没有使用[OR]而卡住了。我也编辑了你的第一个条件。

RewriteEngine On 

RewriteCond %{HTTPS} !=on [OR] 
RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC, OR]
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R,L]

确保在测试之前清除缓存。

您可以尝试编辑,首先将所有内容强制为HTTPs本身:

RewriteEngine On

RewriteCond {HTTPS} !=on
RewriteRule ^.*$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

我不是百分之百确定你要用第二部分实现的目标,就像你想在所有内容上强制使用HTTP一样,那么上面就没问题了。我读了你的问题标题限制,这些应该是限制吗?现在他们不是。

RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC]
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

工作一个

RewriteEngine On 
RewriteCond %{HTTPS} !=on [OR] 
RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC,OR]
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC,OR]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R,L]