以兼容 HSTS 的方式将 dev 子域重定向到 dev 子目录

Posted

技术标签:

【中文标题】以兼容 HSTS 的方式将 dev 子域重定向到 dev 子目录【英文标题】:Redirect dev subdomain to dev subdirectory in HSTS compatible way 【发布时间】:2022-01-11 12:38:53 【问题描述】:

我正在尝试重定向

http://dev.example.comhttps://www.example/dev

在我的 htaccess 中使用此代码:

RewriteCond %HTTPS !on
RewriteCond %HTTP_HOST ^dev.example.com
RewriteRule ^(.*)$ https://www.example.com/dev/$1 [L,NC,QSA]
RewriteCond %HTTP_HOST ^dev.example.com$ [NC]
RewriteRule ^((?!dev).*)$ /dev/$1 [NC,L]

一家安全评估公司抱怨以下问题:

HTTP 站点以无法使用 HTTPS 和 HSTS 标头保护的方式将用户重定向到新 URL。这使用户容易受到中间人攻击者的攻击,这些攻击者可以将他们重定向到目标网站的欺诈/欺骗版本。

我该怎么做?第一次重定向 http://dev.example.comhttps://dev.example.com 然后 https://dev.example.comhttps://www.example.com/dev?

【问题讨论】:

您真的要在这个阶段实施 HSTS 吗?或者您只是想让重定向符合 HSTS 标准?确认一下,您是否要将 everythingdev.example.com 重定向到 www.example.com?只是你的指令目前没有这样做。 @MrWhite 我想将所有内容从 dev.example.com 重定向到 www.example.com/dev 并使其符合 HSTS。这可能吗? 【参考方案1】:

是的,您应该首先重定向 http://dev.example.comhttps://dev.example.com 然后 https://dev.example.comhttps://www.example.com/dev 如你所说。当您实施 HSTS 时,HTTPS 重定向除了将 http 更改为 https 之外什么都不做。用于其他目的的重定向(例如将子域更改为子目录)必须在单独的重定向中完成。

您可以通过从您的第一个重写规则中删除 dev/ 并保留 dev 子域来轻松修改您的 .htaccess 规则:

RewriteCond %HTTPS !on
RewriteCond %HTTP_HOST ^dev.example.com
RewriteRule ^(.*)$ https://dev.example.com/$1 [R=301,L,NC,QSA]
RewriteCond %HTTP_HOST ^dev.example.com$ [NC]
RewriteRule ^((?!dev).*)$ /dev/$1 [R=301,NC,L]

【讨论】:

嗨@stephen-ostermiller。谢谢,这适用于域,但不适用于内部页面。即,当尝试将dev.example.com/page 重定向到example.com/dev/page 时,它会给出 404(直接访问时此页面加载正常) 我为你修好了 你测试了吗?抱歉,还是一样的 404... 确保在测试之间清除浏览器缓存。或在命令行上进行测试,例如:curl --head http://dev.example.com 嗨@stephen-ostermiller - 它仍然无法正常工作。还尝试从没有此域缓存的浏览器。

以上是关于以兼容 HSTS 的方式将 dev 子域重定向到 dev 子目录的主要内容,如果未能解决你的问题,请参考以下文章

无法使用httpd-vhosts.conf从子域重定向到子子域

防止http页面重定向到https页面

PHP:将主域重定向到https:// www,子域重定向到https://(不带www)

.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)

静态网站托管中子域的 AWS S3 存储桶重定向与 DNS CNAME

带有通配符子域的 Apache SSL 重写