2012-03-18 42 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