将多个域重定向到一个域(之前有或没有 www)

Posted

技术标签:

【中文标题】将多个域重定向到一个域(之前有或没有 www)【英文标题】:Redirect multiple domains to one domain (with or without www before) 【发布时间】:2013-06-26 06:25:33 【问题描述】:

我有大约 18 个域需要重定向到新域。它必须在有或没有前缀 www 的情况下工作。

我试过了:

<IfModule mod_rewrite.c>
    RewriteEngine on 
    Rewritecond %HTTP_HOST !^www\.domain\.com
    RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>

这给了我一个重定向循环(我认为只能在 www 之前使用?)。

【问题讨论】:

因为每个域末尾的[OR] 不在您的答案中,这解决了我的问题。 【参考方案1】:
RewriteEngine on
RewriteCond %HTTP_HOST ^domain1.com [OR]
RewriteCond %HTTP_HOST ^domain2.com [OR]
RewriteCond %HTTP_HOST ^domain3.com [OR]
RewriteCond %HTTP_HOST ^domain4.com [OR]
RewriteCond %HTTP_HOST ^domain5.com
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=permanent,L]

这会将所有 18 个域重定向到新的单个域 www.newdomain.com


否则,如果它们位于不同的主机上,您可以使用以下代码重定向每个域:

RewriteCond %HTTP_HOST ^domain.com
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=permanent,L]

【讨论】:

谢谢,我试试看。 www 开头的域不会受此影响。您可以使用以下方式包含此类域:RewriteCond %HTTP_HOST ^/?(?:www\.)?domain1.com 你能解释为什么当最终域是“https”并且其中一个域是相同名称时这不起作用,例如bob.com,最终规则是https://www.bob.com - 它返回一个错误配置错误 如果有人使用 https 调用我的域之一,我该如何处理?例如。 domain1.com.【参考方案2】:

您可以这样做:

将所有不是 newdomain.com 的内容重定向到http://www.newdomain.com

RewriteEngine On
RewriteBase /
RewriteCond %HTTP_HOST !newdomain.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [L,R=301]

这要归功于:http://www.raramuridesign.com/blog/83-dev-htaccess-redirect-a-domain-or-multiple-domains.html,这里有更详细的解释。

我在一个客户项目中试用过它,它就像一个魅力。

【讨论】:

ì 猜想如果我将RewriteCond 地址填写到www.newdomain.com,它还会将任何子域重定向到www。我说的对吗? 这很好用,除非 URL 附加了一些东西(例如 example.com/members)。是否可以将其扩展为自动包含输入 URL 的后半部分? 这并不能解决问题。如果我有 test.com/one 等到 test.com/ten,并且我只想将后 5 个重定向到 newtest.com/ ,这不会【参考方案3】:

在翻阅 SO 和其他主机说明几天后,我的经历令人失望。但是,我挑选了所有这些中最有效的部分,并得出以下结果:

RewriteEngine On
RewriteCond %HTTP_HOST ^www\.domain1\.com$ [OR]
RewriteCond %HTTP_HOST ^domain1\.com$ [OR]
RewriteCond %HTTP_HOST ^www\.domain2\.com$ [OR]
RewriteCond %HTTP_HOST ^domain2\.com$ [OR]
RewriteCond %HTTP_HOST ^www\.domain3\.com$ [OR]
RewriteCond %HTTP_HOST ^domain3\.com$
RewriteRule ^/?$ "http\:\/\/www\.domain\.com\/" [R=301,L]
上述格式也是根据 cPanel 在 GUI 中完成的重定向样式。 www 的重定向。版本和非 www。域名版本是其他解决方案(至少我试过了!)无法解决的问题之一。 关注^/?$中的RewriteRule

如果你想将主域的www版本重定向到它的非www版本,最后两行应该是这样的:

RewriteCond %HTTP_HOST ^www\.domain\.com$
RewriteRule ^/?$ "http\:\/\/domain\.com\/" [R=301,L]

很好的重定向!

【讨论】:

【参考方案4】:
RewriteEngine on
RewriteCond %HTTP_HOST ^domain.com
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=permanent,L]

^domain.com 解决了 WWW 的问题,所以现在所有子域都会重定向。

确保http://www.newdomain.com 不包含在RewriteCond 中。

这会导致重定向循环

More info

【讨论】:

是否可以匹配“任何not newdomain.com”而不是手动将每个域添加为RewriteCond?这对我来说将是一个巨大的麻烦,因为大约有 18 个域指向新域,并且客户正在考虑尽快添加更多域(我不想每次都在 .htaccess 中挖掘)。 RewriteCond %REQUEST_URI !^newdomain.com 我认为这可行 不幸的是,这似乎不起作用。我想我必须为每个域手动完成。我假设我可以添加多个 RewriteCond 行,它会工作吗?

以上是关于将多个域重定向到一个域(之前有或没有 www)的主要内容,如果未能解决你的问题,请参考以下文章

301 使用 web.config 将一个域重定向到另一个域

如何使用 htaccess 将多个域重定向到除 1 个目录之外的另一个域?

如何将非 www 域重定向到 Azure 上托管的 asp.net mvc 中的 WWW 域?

如何将一个域重定向到另一个域

301使用.htaccess将一个域重定向到另一个域

IIS7 或 .Net 301 从一个域重定向到另一个域