使用htaccess进行站点重定向会创建无限循环

时间:2014-08-05 19:54:32

标签: apache .htaccess redirect

目前,我们在一个GoDaddy帐户中托管了多个网站。每个站点都在一个单独的文件夹中,它们各自的域绑定到这些文件夹。问题是我们的主站点位于主机的根目录中,而我们的主域名链接到此根目录。此设置的问题是,例如,如果我的其他网站之一位于名为" secondsite"的文件夹中,我可以通过访问www.secondsite.com(这很好)到达网站,但也是访问www.mainsite.com/secondsite,我们绝对不想要。

我们的想法是将主站点的所有文件移动到他们自己的文件夹中(让我们称之为" mainsite")。当我与GoDaddy交谈时,他们告诉我要对该文件夹进行301重定向。我从未使用过.htaccess,但是我查了解如何重定向,发现我需要写这个:

重定向301 / http://mainsite.com/mainsite

但是,如果我在尝试访问网站时这样做,我会获得无限重定向:http://mainsite.com/mainsitemainsitemainsitemainsitemainsitemainsitemainsitemainsitemainsitemainsitemainsitemainsite

我已经在线查看并尝试使用其他解决方案,例如

RedirectPermanent / http://mainsite.com/mainsite

但效果是一样的。

不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

使用Redirect时,您将路径节点链接在一起,所以:

Redirect / /abc/

表示任何 /开头的内容都会转到/abc/,例如:

/ -> /abc/
/foo -> /abc/foo
/1/2/3/4/5 -> /abc/1/2/3/4/5

因此,由于您将重定向到到同一主机,/会捕获所有内容并且您有一个无限循环。

尝试使用RedirectMatch

RedirectMatch 301 ^/(?!mainsite)(.*)$ /mainsite/$1

或我们mod_rewrite:

RewriteCond %{HTTP_HOST} ^(www\.)?mainsite\.com$ [NC]
RewriteRule ^(?!mainsite)(.*)$ /mainsite/$1 [L,R=301]