【发布时间】:2012-08-02 17:28:06
【问题描述】:
在为 https 运行任何 RewriteCond 或 RewriteRule 之前,是否有办法检查 apache 是否安装了带有 htaccess 的 ssl 证书?
例如:
Apache 安装了 ssl 证书 RewriteCond {HTTPS} !on 重写规则 %{HTTP_HOST}%{REQUEST_URI}
谢谢!
【问题讨论】:
在为 https 运行任何 RewriteCond 或 RewriteRule 之前,是否有办法检查 apache 是否安装了带有 htaccess 的 ssl 证书?
例如:
Apache 安装了 ssl 证书 RewriteCond {HTTPS} !on 重写规则 %{HTTP_HOST}%{REQUEST_URI}
谢谢!
【问题讨论】:
不是检查“如果 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 已加载的事实并不意味着它已配置。
mod_ssl 并启用它(通过SSLEngine on)是两件不同的事情。 <IfModule mod_ssl.c> 仅检查模块是否已加载(以便能够使用 SSL* 指令),它不检查它们是否在任何地方使用。例如,它们也可以用在与普通主机不同名的VirtualHost 中。
SSLEngine On 将仅在实际运行 ssl 的 VirtualHost 上使用,因此在 http-vhost(即使具有相同名称)上,这无论如何都会关闭......因此有检查这个没有意义或选项......但你是对的,如果所有虚拟主机上的 sslengine 都关闭,那么这仍然会失败
如果 Apache 没有安装证书,协议不可能是 HTTPS。
【讨论】: