Apache-2.4

僅將文件根目錄和特定頁面重定向到另一個域

  • April 20, 2021

可能聽起來令人困惑,但我想要實現的是:

  1. 如果使用者訪問:

www.mydomain.com(有或沒有www.

將它們轉移到:

www.myotherdomain.com/welcome-old-users 2. 同時,我想實現這一點:

如果他們訪問:

www.domain.com/about-us(有或沒有www.

將它們轉移到:

www.myotherdomain.com/about-us

我到目前為止是這樣的:

<IfModule mod_rewrite.c>
   RewriteEngine On

   # To redirect all users to HTTPS 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

   # Redirects all www to non-www
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]


    RewriteBase /
    RewriteCond %{HTTP_HOST} (^www.)?mydomain.com/?$ [NC]
    RewriteRule ^(.*)$ https://myotherdomain.com/$1 [R=301,L]

這適用於第 2 點

任何幫助表示讚賞!

RewriteCond %{HTTP_HOST} (^www.)?mydomain.com/?$ [NC]
RewriteRule ^(.*)$ https://myotherdomain.com/$1 [R=301,L]

這適用於第 2 點

但是這樣做的“問題”是它重定向了所有內容,而不僅僅是/about-us,這就是您所說的第 2 點的要求。

(^www.)?mydomain.com/?$- 您將字元串開頭的錨點 ( ^) 放在了錯誤的位置。這將匹配任何以“mydomain.com”結尾的主機名(包括任何共享相同後綴的子域和域)。標Host頭永遠不會以斜線結尾,因此/?結尾的 是多餘的。

(並且RewriteBase這裡不需要該指令。)

您需要在文件頂部的現有指令之前.htaccess執行以下操作:

# Redirect "/" (document root) only
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com [NC]
RewriteRule ^$ https://www.myotherdomain.com/welcome-old-users [R=302,L]

# Redirect "/about-us" only
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com [NC]
RewriteRule ^about-us$ https://www.myotherdomain.com/$0 [R=302,L]

您需要在測試前清除記憶體。使用 302(臨時)重定向進行測試,並確保在更改為 301(永久)重定向之前它可以正常工作 - 如果這是有意的話。

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