将多个域重定向到一个域(之前有或没有 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 个目录之外的另一个域?