以兼容 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.com
到
https://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.com
到 https://dev.example.com
然后
https://dev.example.com
到 https://www.example.com/dev
?
【问题讨论】:
您真的要在这个阶段实施 HSTS 吗?或者您只是想让重定向符合 HSTS 标准?确认一下,您是否要将 everything 从dev.example.com
重定向到 www.example.com
?只是你的指令目前没有这样做。
@MrWhite 我想将所有内容从 dev.example.com 重定向到 www.example.com/dev 并使其符合 HSTS。这可能吗?
【参考方案1】:
是的,您应该首先重定向
http://dev.example.com
到 https://dev.example.com
然后
https://dev.example.com
到 https://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从子域重定向到子子域
PHP:将主域重定向到https:// www,子域重定向到https://(不带www)
.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)