我有一个位于Network Solutions的站点,以及两个域。"旧域"过去指向主机帐户,但现在"新域"指向主机。
问题:如果不创建重定向循环,重定向"OldDomain"就无法工作。
我试过以下几种:
1) 重定向OldDomain(带/out"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重定向??
感谢您在这方面的帮助!
选项1没有任何作用,因为在条件中有这个逻辑
- 主机为
www.olddomain.com
-
OR主机为
olddomain.com
-
AND主机为
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]
选项2,您可以查看主机是否包含olddomain.com
:
if(strripos($dom, 'olddomain.com') >= 0) {
这里的问题是,如果没有找到字符串,strripos()
将返回FALSE(也是一个0),这意味着如果$dom
是www.newdomain.com
,它将返回FALSE或0
,而>= 0
将为true,从而再次重定向。你需要做这样的事情:
if(strlen(strstr($dom, 'olddomain.com')) > 0) {