1

我有一个托管在 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 重定向?

感谢您对此的任何帮助!

4

1 回答 1

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]

选项 2,您可以查看主机是否包含olddomain.com

if(strripos($dom, 'olddomain.com') >= 0) {

这里的问题是如果找不到字符串,则strripos()返回FALSE$dom (也是 0),这意味着如果是www.newdomain.com,它将返回FALSE,或者0,并且>= 0将是 true,从而再次重定向。你需要做这样的事情:

if(strlen(strstr($dom, 'olddomain.com')) > 0) {
于 2012-08-21T20:12:14.517 回答