独特的PHP和HTACCESS域转发问题

时间:2012-08-21 16:14:50

标签: php .htaccess redirect http-status-code-301

我在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重定向?

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:2)

选项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]

olddomain.com

选项2,您可以查看主机是否包含if(strripos($dom, 'olddomain.com') >= 0) {

strripos()

这里的问题是$dom如果找不到字符串,则返回 FALSE (也是0),这意味着如果www.newdomain.com0,则将返回 FALSE >= 0if(strlen(strstr($dom, 'olddomain.com')) > 0) { 将为真,从而再次重定向。你需要做这样的事情:

{{1}}