我在Network Solutions上有一个站点,还有两个域。 “OldDomain”过去常常指向托管帐户,但现在“NewDomain”指向托管帐户。
问题:如果不创建重定向循环,重定向“OldDomain”将无效。
我尝试了以下内容:
1)重定向OldDomain(带/出“www”),再为NewDomain重定向非www:
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,NC]
2)使用PHP标头重定向:
$dom = $_SERVER['HTTP_HOST'];
if(strripos($dom, 'olddomain.com') >= 0) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.com/");
}
选项#1什么都不做。选项#2使我进入重定向循环,即使前两个RewriteCond
规则被注释掉了。
之前我做过很多.htaccess重定向,但是这个让我头疼的是为什么它的表现不对。这只是一个网络解决方案问题吗?我从来没有遇到任何其他主机的问题。顺便说一句,NS支持告诉我,我必须付钱将OldDomain转发到NewDomain,因为它当前没有指向托管包。如果是这种情况,为什么我不能将两个域都指向同一个托管包,并且至少在索引页的标题中使用PHP重定向?
感谢您提供任何帮助!
答案 0 :(得分:2)
选项1没有做任何事情,因为你的条件中有这个逻辑
www.olddomain.com
olddomain.com
newdomain.com
显然,主机不能同时是newdomain.com
和其中一个旧域。请尝试为其添加[OR]
,并为[NC]
添加一些RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,NC]
:
olddomain.com
选项2,您可以查看主机是否包含if(strripos($dom, 'olddomain.com') >= 0) {
:
strripos()
这里的问题是$dom
如果找不到字符串,则返回 FALSE (也是0),这意味着如果www.newdomain.com
是0
,则将返回 FALSE 或>= 0
,if(strlen(strstr($dom, 'olddomain.com')) > 0) {
将为真,从而再次重定向。你需要做这样的事情:
{{1}}