使用.htaccess为子域名强制启用SSL HTTPS

6

我有一个强制网站使用SSL的代码:

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

我从这里获取了以下内容:

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

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

我猜想我需要添加另一个RewriteCond,基本上是说被访问的域名是否为http://sub.domain.org,但我不知道如何编写此代码。

我一直在查看其他stackoverflow问题,例如:

强制将主域名设置为HTTPS和WWW,将子域名仅设置为HTTPS HTACESS

使用.htaccess和mod_rewrite强制使用SSL / https

以及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]

在这个问题/答案中,回答有些颠倒了:

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

然而,我仍然无法理解如何正确地执行它。
如果有人能够向我解释我做错了什么,我需要做什么才能做到正确,并且如何调试他们的重写条件和规则,以确保它正常工作,我将非常感激。有时我认为我的浏览器正在缓存我编写的规则,我的不同尝试没有产生任何影响!
我的整个.htaccess文件看起来像这样:
选项-MultiViews
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]


1
RewriteCond %{HTTP_HOST} =reports.uksacb.org 应该可以工作。清除浏览器缓存并在第二条规则中使用该条件进行重新测试。 - anubhava
@anubhava 好的,我会试一下看看效果如何,谢谢! - haakym
如果您拥有子域的有效证书,那么该证书也将适用于主域,因此只需将所有域名/子域设置为TLS安全即可。 - Martin
2个回答

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

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

  # 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。

希望它能对任何人有用。


我花了太长时间寻找解决方案。非常感谢! - user2924019

1

1
第一个网页不再活跃。 - WendiT
谢谢。我还不知道这个。 - WendiT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接