如何仅使用 .htaccess 文件设置 ssl

Posted

技术标签:

【中文标题】如何仅使用 .htaccess 文件设置 ssl【英文标题】:How to setup ssl using only .htaccess file 【发布时间】:2016-10-19 17:13:21 【问题描述】:

有没有人尝试为仅使用 .htaccess 文件的网站设置 ssl?

我阅读了许多指向 apache 的 httpd.conf 文件的文档,在 <virtual-host> 标签中添加了一些行。 但我无法访问我的虚拟主机上的 httpd.conf 文件... 我只能放。我的托管目录中的.htaccess 文件。 那么有没有办法只使用.htaccess文件来实现HTTPS网站。

注意:我已经拥有我的域的证书。

【问题讨论】:

如果您已经安装了 SSL 证书,那么您需要 .htaccess 做什么? 您的托管服务提供商很可能有一些上传证书的方法,如果没有通过上传证书自动启用 SSL,也有一些方法可以激活 SSL。 @OlafDietsche 是的,我的托管服务提供商提供了一种添加 SSL 的方法,但他们为此收取巨额费用,但我从 LetsEncrypt 免费获得了证书,并希望将它们用于我的网站 有些主机允许您上传自己的 SSL 证书以供使用。一方面,GoDaddy 让您做到这一点。我不确定其他主机。 @Raaghu ᴄɢɪ 脚本? 【参考方案1】:

您可以从纯 HTTP 重定向到 HTTPS,但不能从 htaccess 激活 SSL/TLS。

要激活 SSL/TLS,您必须在其他指令中使用 SSLEngine

SSLEngine on

从文档中可以看出,

上下文:服务器配置、虚拟主机

这只能在服务器配置或虚拟主机上下文中实现,而不是在目录和 .htaccess 上下文中。

这意味着,您必须通过您的网络托管服务提供商为您提供的方式。当您已经拥有证书时,单独激活可能会更便宜甚至免费。通常,证书是使用 HTTPS 的昂贵部分。相比之下,激活 SSL 是一次性配置。

【讨论】:

【参考方案2】:

基本上你不能。如果您只能修改 htaccess 文件,那么您的托管服务提供商可能会为您提供另一种设置证书的方法。如果没有,你就做不到。

【讨论】:

关于 ʜᴛᴛᴘꜱ 端口 80 的 ᴄɢɪ 脚本怎么样?【参考方案3】:

(1) 您需要您的托管公司或其他公司提供的经过验证的证书。

(1.1) https://www.ionos.co.uk/security/ssl-certificate?ar=1#packages
(1.2) https://letsencrypt.org/

(2) 设置完成后,您可以使用https://yourdoman.com 连接到您的站点,您需要在文档根目录中编辑您的 .htaccess 文件。仅仅因为您拥有身份验证证书并不能使您安全。首先,您需要强制执行 HTTP 严格传输安全 (HSTS)。我引用“HSTS 允许网站请求始终通过 HTTPS 联系它。谷歌 Chrome、Firefox、Safari、Opera、Edge 和 IE 支持 HSTS”(chromium.org/hsts,2020)。您还需要将无端口 443 (https://) 流量(例如端口 80 (http://) 重定向到端口 443。这种组合应确保加密通信。但这仍然不能保证您的安全,因为您租用的服务器上可能仍有不安全的 SSL/TLS 版本可用。我希望这会有所帮助。

以下内容是从我的 .htaccess 文件中复制粘贴出来的;

##############################################
# HTTP STRICT TRANSPORT SECURITY             #
##############################################

# Use HTTP Strict Transport Security to force client to use secure connections only
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

##############################################
# ENABLE REWRITE ENGINE                      #
##############################################

RewriteEngine On
RewriteBase /

##############################################
# FORCE PORT 443                             #
##############################################

RewriteCond %HTTPS !=on
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301,NE]

#Force 443 no 80
RewriteCond %SERVER_PORT 80
RewriteRule ^(.*)$ https://www.yourdoman.com/$1 [R,L]

我希望这对某人有所帮助,问候...

【讨论】:

【参考方案4】:

你可以阅读我认为对你有帮助的文件。

https://www.digicert.com/ssl-certificate-installation-apache-cpanel.htm

https://www.namecheap.com/support/knowledgebase/article.aspx/9418/0/cpanel

【讨论】:

链接只回答与链接无关。【参考方案5】:

要强制使用 SSL,您需要使用的是:

RewriteEngine On
RewriteCond %HTTPS !=on
RewriteRule ^.*$ https://%SERVER_NAME%REQUEST_URI [R,L]

显然,您需要拥有 SSL 证书,您在问题中提到您确实拥有这些证书。

【讨论】:

这只会强制重定向到 https,而不是 ssl 本身

以上是关于如何仅使用 .htaccess 文件设置 ssl的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 如何仅将子域/文件夹重定向到子域

如何仅使用 .htaccess 将所有 url 重定向到 1 个 url

如何借助 .htaccess 设置在 HTML 文件中使用 PHP7 代码

Linux SSLH

htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]

仅允许缓存来自特定网址的图片