簡體   English   中英

.htaccess 301將舊域名重定向到新域,從托管根目錄到子文件夾,可以運行,但是為什么呢?

[英].htaccess 301 redirect old to new domain, from hosting root to subfolder, working but why?

場景:我已將WordPress網站移至新域,並希望301將所有頁面從舊域重定向到新域。 兩個站點都在運行Apache的同一主機帳戶上。 舊站點位於根目錄(public_html),新站點位於子文件夾(位於根目錄的下方/內部)。

我設法完成了這項工作,但我想學習並了解它的工作原理。 因此,以下是我的“旅程”和解決方案的快速概述,以及三個具體問題。

首先,我嘗試進行這樣的重定向(將代碼添加到根.htaccess文件中):

# 301 Page Redirects - not working - causes redirect loop

redirect 301 /  https://new-domain.com/     
redirect 301 /services/ https://new-domain.com/services/    
redirect 301 /recipes/  https://new-domain.com/recipes/ 

但這會導致重定向循環。 我猜是因為帶有這些規則的.htaccess文件位於根級別,因此也影響子文件夾。

問題1:以上關於重定向循環原因的假設是否正確?

然后,我嘗試更加具體,然后將以下代碼放在根.htaccess文件中:

# 301 Page Redirects - not working - does nothing at all - not sure why 

redirect 301 https://old-domain.com/ https://new-domain.com/    
redirect 301 https://old-domain.com/services/ https://new-domain.com/services/  
redirect 301 https://old-domain.com/recipes/ https://new-domain.com/recipes/

我希望上面的代碼可以解決問題,因為它對舊域更具體。 我的想法是,它准確地指定了舊域,因此可以繞過重定向循環。 但是相反,此代碼似乎根本沒有任何作用。 重定向循環消失了,但是現在根本沒有任何重定向發生。

問題2:為什么上述代碼根本不會產生任何重定向?

然后,我找到了這個答案,並從中應用了代碼,該代碼可以完美地工作並創建所有重定向。 此外,它比上面我之前的嘗試要優雅得多。 這是代碼:

# 301 Redirects from old-domain.com to new-domain.com - THIS CODE WORKS - Yay!

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old-domain.com$
RewriteRule (.*)$ https://new-domain.com/$1 [R=301,L]

問題3:當我將其放在根.htaccess根目錄中時,為什么此代碼不會引起任何重定向循環?

我意識到我在復制/粘貼代碼時並沒有完全理解它的工作原理。 因此,我希望以簡單的方式對這些行為進行解釋。 謝謝。

答1:

根據您提供的信息,我會拒絕。 您未指定new-domain.com網站是否已配置(以apache配置),其文檔根目錄為public_root或public_root / subfolder(根據描述的行為判斷,我會說是前者)。 在這種情況下,當您請求https://old-domain.com/anything ,服務器將(由於第一個規則中的無條件重定向)響應重定向到https://new-domain.com/anything 然后,客戶端瀏覽器將請求該URL,它將命中相同的Apache和相同的.htaccess,這將再次導致相同的重定向,從而導致循環。

答案2:

重定向語法

 Redirect [status] [URL-path] URL 

舊的URL路徑是區分大小寫(%解碼)的路徑,以斜杠開頭。

在您的規則中,您將[URL-path]指定為https://old-domain.com/ ,這是錯誤的:它可以是//services//recipes ,但不能是https://old-domain.com/https://old-domain.com/services/ 請求[URL-path]不匹配[URL-path]在您的規則中指定,所以重定向從未發生過。

答案三:

這基本上與答案1中的第一個規則具有相同的作用,但有一個重要的區別:僅當請求中的主機名(或更確切地說,請求中的Host:標頭的內容)為等於old-domain.comwww.old-domain.com ,這將阻止循環,因為來自客戶端的第二個請求將使用new-domain.com主機名。

另外,從上面看來,您子目錄中的“新”網站似乎永遠也不會提供服務:如果請求old-domain.comnew-domain.com ,則將顯示public_html文件夾中的網站(僅顯示主機名客戶端瀏覽器的地址欄將會更改)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM