1

我们正在迁移到一个新的服务器结构,我需要一些有关 htaccess 的帮助。我是 php 程序员,但绝不是 apache 专家。

这是简单的解释:

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

  • 特定目录 www.oldsite/dir1 重定向到新站点上的子域,如 newdomain.newsite.com

  • 其他一切 www.oldsite.com/whatever/ 需要转到 apps.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

4

2 回答 2

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 文件。

于 2012-09-13T17:29:10.087 回答
0

使用 mod_alias,您可以将其放在 server/vhost 配置或 htaccess 文件中(在 oldsite.com 的文档根目录中):

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]
于 2012-09-13T17:29:16.263 回答