【问题标题】:htaccess redirect NOT working for HTTPS - 400 Bad Request Apache 2.4.6htaccess 重定向不适用于 HTTPS - 400 Bad Request Apache 2.4.6
【发布时间】:2015-07-22 12:57:11
【问题描述】:

我刚刚在多个网站上安装了 SSL 证书。如果我直接访问该站点的 https 版本,它们可以正常工作,但是当我访问 http 版本时,我会得到:“原因:您正在对启用 SSL 的服务器端口使用纯 HTTP。”

这是应该工作但不...

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

也没有任何版本

!=on =80 !=443, etc.

我什至尝试将它放在服务器上的 vhost.conf 文件中。

我和我的开发人员都没有想法,令人震惊的是,我们无法通过全能的 Google 找到任何东西来帮助我们。有人有什么想法吗?

【问题讨论】:

    标签: apache .htaccess http ssl https


    【解决方案1】:

    我正在使用这些重写规则将我的 http 请求重定向到带有 SSL 证书的应用程序上的 https。

    RewriteEngine Off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
    

    【讨论】:

    • 我试过这个只是为了看看,但它不起作用。我的 Apache 配置中一定发生了一些事情。我在 2.4.6。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我认为您的问题出现得很早,甚至在 mod_rewrite 应用于请求之前。

      您在端口 80 上侦听的 VirtualHost 是一个 https 虚拟主机,但浏览器试图在端口 80 上使用 普通 http,这不起作用。

      在 Apache SSL 被激活时:

      SSLEngine on
      

      只有在您的虚拟主机监听*:443(或something:443 的任何变体)时才能激活此指令。

      您应该添加一些在端口 80 上侦听的 Virtualhost,支持可以在该服务器上使用的一堆 ServerName 和 ServerAlias(或者可能是所有名称,通过确保此 Virtualhost 是端口 80 的默认名称),并且其唯一工作是在端口 443 上重定向。

      在这里您可以使用@Anand Bhat 提供的链接来执行此任务(并且不需要 mod_rewrite)。

      但所有这些“重定向到 https”任务假设您已经有一个未激活 https 的工作虚拟主机。因为如果在任何地方都激活了 https,您甚至无法开始与服务器进行讨论以接收重定向,因此没有“普通 http”通道来接收此响应甚至开始请求某些东西。

      【讨论】:

        【解决方案4】:

        好的,万一其他人遇到这个问题,我想更新,因为我终于修复了。对我们来说,我们的 vhost.conf 文件中还有其他一些干扰的东西。一旦我将其清除并接受了一些其他建议,这就是最终在 vhost.conf 中工作的代码。 .htaccess 文件现在没有任何内容,因为它不需要。

        ## -- VIRTUAL HOSTS -- ##
        NameVirtualHost *:80
        
        <VirtualHost *:80>
                ServerName dev.example.net
                Redirect permanent / https://dev.example.net/
        </VirtualHost>
        
        <VirtualHost *:443>
                #-SERVER CONFIG-#
                ServerAdmin webmaster@example.net
                ServerName dev.example.net
                ServerAlias dev.example.net
                DocumentRoot /var/www/html/example
        
                #-SSL-#
                SSLEngine On
                SSLProtocol all -SSLv2
                SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
                SSLCertificateFile /etc/httpd/conf/ssl.crt/...
                SSLCertificateKeyFile /etc/httpd/conf/ssl.key/...
                SSLCACertificateFile /etc/httpd/conf/ssl.crt/...
                SSLCertificateChainFile /etc/pki/tls/certs/...
                SSLCACertificateFile /etc/pki/tls/certs/...
        
                #-LOGGING-#
                ErrorLog /var/www/html/example/error_log
        
        </VirtualHost>
        

        【讨论】:

          猜你喜欢
          • 2015-04-05
          • 2018-12-23
          • 1970-01-01
          • 2018-12-12
          • 1970-01-01
          • 2012-04-25
          • 2017-06-04
          • 1970-01-01
          • 2013-11-10
          相关资源
          最近更新 更多