使用 .htaccess 对子域强制使用 SSL HTTPS

Posted

技术标签:

【中文标题】使用 .htaccess 对子域强制使用 SSL HTTPS【英文标题】:Force SSL HTTPS for subdomain with .htaccess 【发布时间】:2016-09-25 16:29:41 【问题描述】:

我有这个代码通常用于在网站上强制使用 SSL:

RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

我从here得到的

我希望它仅适用于特定的子域

例如,如果您要访问http://sub.domain.org,它应该重定向到https://sub.domain.org

我有一种预感,我需要添加另一个 RewriteCond,它基本上说 被击中的域是 http://sub.domain.org,但我不知道如何编写这段代码.

我一直在研究其他 *** 问题,例如:

Force HTTPS and WWW for domain and only HTTPS for subdomains HTACESS

Force SSL/https using .htaccess and mod_rewrite

和 Apache 文档:https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

我也有过这些尝试:

RewriteCond %HTTPS !=on
RewriteCond %HTTP_HOST !^(reports\.)?uksacb\.org$ [NC]
RewriteRule ^.*$ https://%1%REQUEST_URI [R,L]

有点颠倒了question/answer中的答案:

RewriteCond %HTTPS !=on
RewriteCond %HTTP_HOST =reports.uksacb.org
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

但是我仍然无法理解如何正确地做到这一点。

如果有人能向我解释我做错了什么,我需要做些什么来让它正确,以及如何调试他们的重写条件和规则以确保它正常工作,我将非常感激。有时我认为我的浏览器正在缓存我编写的规则,而我的不同尝试没有任何影响!

我的整个.htaccess 看起来像这样:

选项 - 多视图

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Force SSL
RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]

【问题讨论】:

RewriteCond %HTTP_HOST =reports.uksacb.org 应该可以工作。清除浏览器缓存并在第二条规则中使用该条件重新测试 @anubhava Right 会试一试,看看进展如何,谢谢! 如果您有一个有效的子域证书,该证书将通过扩展对主域有效,那么只需将所有域/子域设置为 TLS 保护。 【参考方案1】:

为了调试,我使用了一个我找到的网站https://htaccess.madewithlove.be/

使用您提供的规则

RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

我遇到了一个错误

RewriteCond %HTTPS !=on

这可能对你有用

RewriteCond %HTTPS off
RewriteRule (.*) https://%SERVER_NAME/%$1 [R,L] 

在https://www.sslshopper.com/apache-redirect-http-to-https.html找到上面的例子

【讨论】:

第一个网页不再活跃 谢谢。还不知道那个【参考方案2】:

为了避免使用域名或子域名,我使用了以下代码:

  # Redirect HTTP to HTTPS
  RewriteCond %HTTPS off
  RewriteCond %HTTP:X-Forwarded-Proto !https
  RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]

我更喜欢没有 WWW。

%HTTPS如果通过 SSL 提供请求,则设置为 on。

%HTTP_HOST 协议(http:// 或 https://)和请求(/example-file.txt)之间的所有内容。

%REQUEST_URI 服务器地址之后的所有内容 - 例如,对http://example.com/my/example-file.txt 的请求将此值设置为 my/example-file.txt。

%HTTP:X-Forwarded-Proto 请求 URL 时使用的协议 - 设置为 http 或 https。

我希望它对任何人都有用。

【讨论】:

我花了太长时间试图找到解决方案。非常感谢!

以上是关于使用 .htaccess 对子域强制使用 SSL HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 和 mod_rewrite 强制 SSL/https

我需要在主域而不是子域上强制 ssl

zf2 - 使用 .htaccess 强制 SSL/https

htaccess 强制 https 并将 www 重定向到非 www,但没有其他子域

.htaccess 使用共享 ssl 证书

如何使用 .htaccess 在 codeigniter 中实现动态子域?