【问题标题】:Check if apache has a ssl certificate installed with htaccess检查 apache 是否使用 htaccess 安装了 ssl 证书
【发布时间】:2012-08-02 17:28:06
【问题描述】:

在为 https 运行任何 RewriteCond 或 RewriteRule 之前,是否有办法检查 apache 是否安装了带有 htaccess 的 ssl 证书?

例如:

Apache 安装了 ssl 证书 RewriteCond {HTTPS} !on 重写规则 %{HTTP_HOST}%{REQUEST_URI}

谢谢!

【问题讨论】:

    标签: .htaccess ssl https


    【解决方案1】:

    不是检查“如果 SSL 证书存在”,而是检查“如果 ssl 模块打开” - 后者本身需要证书

    <IfModule mod_rewrite.c>
    RewriteEngine on
    
      <IfModule mod_ssl.c>
      RewriteCond %{HTTPS} !=on
      RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
      </IfModule>
    
    </IfModule>
    

    【讨论】:

    • 不一定。 mod_ssl 已加载的事实并不意味着它已配置。
    • 您发布的代码与您声称的不符。它不测试 SSL 是否“开启”,只测试 SSL 模块是否已加载。没有答案。
    • @EJP:问题是,所有 SSL_* 变量只有在 ssl 引擎开启 时才有意义,只有在您已经在使用 SSL 时才会发生这种情况......所以我能看到的唯一其他选项是检查是否可以使用 ssl 可以,并且只有在启用模块时才会发生这种情况......我在这里错在哪里?
    • @poncha,加载mod_ssl 并启用它(通过SSLEngine on)是两件不同的事情。 &lt;IfModule mod_ssl.c&gt; 仅检查模块是否已加载(以便能够使用 SSL* 指令),它不检查它们是否在任何地方使用。例如,它们也可以用在与普通主机不同名的VirtualHost 中。
    • @Bruno SSLEngine On 将仅在实际运行 ssl 的 VirtualHost 上使用,因此在 http-vhost(即使具有相同名称)上,这无论如何都会关闭......因此有检查这个没有意义或选项......但你是对的,如果所有虚拟主机上的 sslengine 都关闭,那么这仍然会失败
    【解决方案2】:

    如果 Apache 没有安装证书,协议不可能是 HTTPS。

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 2016-12-24
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2018-11-07
      相关资源
      最近更新 更多