2012-03-18 40 views
0

我在使用Apache MOD-重写为模及其.htaccess文件我的旧域迁移到新域的过程中重定向老DOMIAN到新的领域。 我们有新的域名,其中包括通过.htaccess进行

  1. URL的
  2. 数据库

除了域名,就像是www.oldurl.com,现在它像www.newurl几乎相同的结构。 COM这就是我在我的.htaccess文件旧域

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

上面的设置似乎,除了在一种情况下,我们小时,工作正常这或者已删除或上述规则将不干活这种情况下,结构已更改,因此AVE几个URL在我的旧域来了解加入这样的事情在我的.htaccess文件上面我所

描述旁边
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
Redirect 301 /my-page http://www.newurl.com/your-page 

我总共有20多个这样的URL,我想知道是否需要将那些所有20+ URL映射到那里的新URL,并且我需要关心它们应该放在文件中的任何顺序。

我也想知道Apache将如何工作,将它看任何比赛每个映射的网址是什么?或者它以其他方式工作?

回答

1

Redirect指令将不会被绑定到RewriteCond条件,将永远重定向/我的页面http://www.newurl.com/your-page,也mod_rewrite的拥有mod_alias中的优先级所以RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L]规则被应用于Redirect指令得到看着。然而,如果.htaccess文件位于的文档根内两个oldurl.comnewurl.com域,所述Redirect指令将浏览器被重定向到http://www.newurl.com/my-page,从而重定向(再次)到http://www.newurl.com/your-page

之后施加

所以,这不要紧,你有这些以什么顺序,因为mod_rewrite的被首先应用。如果您有20个需要在新网站上重定向到新网址的网址,则可以在各自的Redirect中对它们进行枚举。否则,如果你不想让浏览器重定向两次,则可以使用mod_rewrite的引擎一一列举:

RewriteEngine On 

# redirect the changed URLs individually 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page$ http://www.newurl.com/your-page [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page2$ http://www.newurl.com/your-page2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page3$ http://www.newurl.com/your-page3 [R=301,L] 

# Finally, redirect everything else as-is 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

注意订购确实事情在这里。不得不重复使用HTTP_HOST的2条件很糟糕,你可以通过使用SKIP来解决这个问题,但重复它们可能会更好。但是,如果你有机会到你的服务器配置或虚拟主机的配置,看看在RewriteMap Directive,它允许你创建的映射,在你的情况下,旧网址到新网址,并且可以减少所有单个更改URL重写到单一个:

内部服务器/虚拟主机的配置,这样的事情:

RewriteMap newurls txt:/path/to/file/map.txt 

/路径/到/文件/映射。TXT看起来像:

my-page your-page 
my-page2 your-page2 
my-page3 your-page3 
etc... 

而且合并后的规则将如下所示:

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^(.*)$ http://www.newurl.com/${newurls:$1} [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
+0

感谢您的宝贵意见,但遗憾的是我没有访问'服务器config'或'虚拟主机配置'文件(共享主机),所以我相信我必须安定下来按照您的建议枚举URL。 – 2012-03-19 12:21:29