htaccess 多个域重定向到 https://www 和特定文档根目录

Posted

技术标签:

【中文标题】htaccess 多个域重定向到 https://www 和特定文档根目录【英文标题】:htaccess multiple domains redirect to https://www and to specific document root 【发布时间】:2018-05-30 12:33:08 【问题描述】:

我有 3 个 LIVE 域,它们指向同一个文档根目录,CMS 用它自己的内容处理每个域。

我现在需要使用 WWW 将所有 3 个域重定向到 HTTPS,并且可以选择在将来更改每个域的文档根目录。

举例说明需要发生的事情:

http://domain1.com => https://www.domain1.com

http://www.domain1.com => https://www.domain1.com

domain2.com 和 domain3.com 也必须如此

三个域的文档根目录是 /cms-1.1/

将来 domain1.com 可能会更改为新的文档根目录 /cms-2.1/,但对于其余域,文档根目录将保持不变 /cms-1.1/

我可以为每个域单独或组合编写一个或多个规则吗??

到目前为止,我来到这里:

对于文档根目录:(对于每个域)

RewriteCond %HTTP_HOST ^domain1.com$ [NC,OR]
RewriteCond %HTTP_HOST ^www.domain1.com$
RewriteCond %REQUEST_URI !^/cms-1.1/*$
RewriteRule ^(.*)$ /cms-1.1/$1 [L]

对于非 www 到 www:(对于每个域)

RewriteCond %HTTP_HOST ^domain1\.com$ [NC]
RewriteRule (.*) http://www.domain1.com/$1 [R=301,L]

对于 HTTPS:(对于每个域)

RewriteCond %HTTPS off
RewriteRule ^(.*)$ https://www.domain1.com/$1 [L,R=301] 

但这行得通吗???由于所有三个域都处于活动状态,因此我不需要任何停机时间...

【问题讨论】:

【参考方案1】:

你可以使用这个通用代码(未测试)

# https mechanism
RewriteCond %HTTP:X-Forwarded-Proto =http
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]

#none www to www.
RewriteCond %HTTP_HOST ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) https://www.%1%REQUEST_URI [R=301,NE,L]

#Document root each domain
RewriteCond %HTTP_HOST ^domain1.com$ [NC,OR]
RewriteCond %HTTP_HOST ^www.domain1.com$
RewriteCond %REQUEST_URI !^/cms-1.1/*$
RewriteRule ^(.*)$ /cms-1.1/$1 [L]

【讨论】:

嗯。它适用于别名域“domain2.com”和“domain3.com”,但不适用于“domain1.com”的托管域......如果他们知道为什么,我会与托管服务提供商核实。 暂别... Cloudflare 上的某些设置设置错误。都好。解决方案有效。

以上是关于htaccess 多个域重定向到 https://www 和特定文档根目录的主要内容,如果未能解决你的问题,请参考以下文章

在 .htaccess 中使用 HTTPS 将旧域重定向到新域

htaccess 将旧域重定向到新域

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

.htaccess 将域重定向到子目录而不更改 URL

htaccess 域重定向到新域

301 使用 .htaccess 从旧域重定向到新域