使用重写规则强制HTTPS

时间:2017-12-12 16:12:23

标签: apache redirect mod-rewrite https

我想强制HTTP进行HTTPS重定向。我尝试了以下方法:

<VirtualHost *:1882>
    ServerAdmin ***
    ServerName 127.0.0.1
    ServerAlias ApplicationServer
    ProxyRequests Off

  #Force SSL
  RewriteEngine On
  RewriteCond %{SERVER_PORT} 1882
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

  #Certificats SSL
  SSLEngine on
  SSLVerifyClient none
  SSLCertificateFile "D:/ssl/server.crt"
  SSLCertificateKeyFile "D:/ssl/server.key"

  DocumentRoot "${INSTALL_DIR}/none"

    ErrorLog "${INSTALL_DIR}/logs/app_error.log"
  CustomLog "${INSTALL_DIR}/logs/app_access.log" combined

    <Location />
    ProxyPass http://localhost:3000/ retry=0
    ProxyPassReverse http://localhost:3000/
    Order deny,allow
    Allow from all
  </Location>
</VirtualHost>

但是在测试时,HTTPS工作,但HTTP返回错误400。 我检查了我的病情HERE,似乎很好。

我的重写规则是否需要写在其他地方?

编辑:

通过添加此虚拟主机修复:

<VirtualHost *:1884>
  #Force SSL
  RewriteEngine On
  RewriteCond %{SERVER_PORT} 1884
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://<URL_TO_HTTPS_VIRTUALHOSTL>%{REQUEST_URI} [L,R=301]
</VirtualHost>

1 个答案:

答案 0 :(得分:1)

您的配置不完整,因为您需要2个不同的虚拟主机:一个用于处理纯文本流量(HTTP),另一个用于HTTPS。我们看到的是两者的混合......在这个虚拟主机中我们理解它应该捕获非SSL流量,但同时你会给出导致精神分裂症和400错误的SSL指令。