2012-09-13 186 views
1

我们正在迁移到一个新的服务器结构,我需要一些htaccess的帮助。我是一名PHP程序员,绝不是Apache专家。.htaccess网站迁移

这里是易懂的说明:

  • 我需要www.oldsite.com的根目录重定向到根目录www.newsite.com。

  • 一个特定的目录www.oldsite/DIR1重定向到新网站一个子域名作为newdomain.newsite.com

  • 其他一切www.oldsite.com/whatever/需要去应用。 newsite.com/whatever/

我有现在的问题是:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteRule/http://www.newsite.com [L,R=301] 
RewriteRule (.*)dir1/ http://newdomain.newsite.com [L,R=301] 
RewriteRule (.*)$ http://apps.newsite.com/$1 [L,R=301] 

但它不是工作,我希望它...

无论如何,任何和所有的帮助将不胜感激。

感谢, -Orallo

回答

0

使用mod_alias中,你可以(在的oldsite.com您的文档根目录)把这个在任一服务器/虚拟主机的配置或在您的htaccess文件:

Redirect 301 /dir1 http://newdomain.newsite.com 
RedirectMatch 301 ^/(.+)$ http://apps.newsite.com/$1 
RedirectMatch 301 ^/$ http://www.newsite.com 

至于mod_rewrite的,你需要因为你是在一个htaccess文件使用它们从你的重写规则删除前面的斜线:

RewriteEngine On 
RewriteBase/
RewriteRule ^$ http://www.newsite.com [L,R=301] 
RewriteRule ^dir1/(.*) http://newdomain.newsite.com/$1 [L,R=301] 
RewriteRule ^(.+)$ http://apps.newsite.com/$1 [L,R=301] 
+0

谢谢乔恩,这工作就像一个魅力。拯救了我的一天! – orallo

+0

还有一个问题,我刚才听说,现在管理员希望根目录服务于旧域的索引而不是发送到新网站?我删除了www.newsitec.com并用/index.php取代了它,但它将第三条规则重定向到apps.newsite.com。有没有办法阻止它? – orallo

+0

另外,我刚刚意识到,如果我忽略第二条规则中的尾部/ in dir1,重定向将通过第三条规则并转到apps.newsite.com/dir1而不是newdomain.newsite.com:-O – orallo

0

你的第一个改写是造成你的问题,基本上都重定向。

这应该做你想要什么:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^/?$ http://www.newsite.com [L,R=301] 
RewriteRule ^/?dir1/(.*) http://newdomain.newsite.com/$1 [L,R=301] 
RewriteRule ^/?(.*)$ http://apps.newsite.com/$1 [L,R=301] 

我建议把这套重写规则在实际的Apache的conf文件中查找该主机并关闭AllowOverride,因为它会提供更好的性能。由于您本质上不再使用旧网站的Web目录,因此没有理由让Apache服务器在该目录(以及任何其他可能仍在那里的子目录)中查找.htaccess文件。

+0

谢谢你太麦克,你可以看到两个非常相似,我也尝试过此配置和它完美的作品了。 – orallo