Dot-Htaccess

如何在 htaccess 中將 domain-1/dir1/dir2/* 重定向/重寫到另一個 domain-2/dir1/dir2/*?

  • April 12, 2019

我正在嘗試將所有 URL 從一個域中的一個目錄重定向到同一目錄到同一伺服器上的另一個域,但無法使其工作。我該如何解決這個問題?

我試過了:

嘗試 1

RewriteBase /
RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301] 

嘗試 2

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteRule ^dir1/dir2(.*)$ https://domain-2.org/$1 [L,R=301]
</IfModule>

期望的輸出:

我希望重定向所有類似於這些模式的 URL:

www.domain-1.org/dir1/dir2/url-1
www.domain-1.org/dir1/dir2/url-2
www.domain-1.org/dir1/dir2/url-N

https://domain-1.org/dir1/dir2/url-1
https://domain-1.org/dir1/dir2/url-2
https://domain-1.org/dir1/dir2/url-N

http://domain-1.org/dir1/dir2/url-1
http://domain-1.org/dir1/dir2/url-2
http://domain-1.org/dir1/dir2/url-N

https://www.domain-1.org/dir1/dir2/url-1
https://www.domain-1.org/dir1/dir2/url-2
https://www.domain-1.org/dir1/dir2/url-N

http://www.domain-1.org/dir1/dir2/url-1
http://www.domain-1.org/dir1/dir2/url-2
http://www.domain-1.org/dir1/dir2/url-N

到:

https://domain-2.org/dir1/dir2/url-1
https://domain-2.org/dir1/dir2/url-2
https://domain-2.org/dir1/dir2/url-N

正則表達式:

https://regex101.com/r/2BD1kB/1

RewriteRule ^dir1\/dir2(.*)$ https://domain-2.org/$1 [L,R=301]

假設您RewriteEngine On在這兩種情況下都有,那麼您的兩次“嘗試”實際上是相同的RewriteBase在這裡無關緊要。

$1反向引用指的是模式中擷取的組,RewriteRule (.*)-之後 /dir1/dir2的所有內容- 所以這不會重定向到另一個域上的“同一目錄”。

由於兩個域都指向同一個伺服器(並且我假設文件系統上的位置相同),因此您需要在重定向中明確檢查域(即hostname )。

請嘗試以下操作:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?domain-1\.org [NC]
RewriteRule ^dir1/dir2/.* https://domain-2.org/$0 [R=302,L]

$0``RewriteRule 是對與pattern匹配的整個 URL 路徑的反向引用。例如。dir1/dir2/url-N.

請注意,這是一個 302(臨時)重定向。使用 302 進行測試,並且只有在您確認這可以正常工作時才更改為 301(永久)重定向。301 被瀏覽器永久記憶體,因此可能會使測試出現問題。

您需要在測試前清除瀏覽器記憶體。

引用自:https://serverfault.com/questions/962861