Apache-2.2

apache - 將 suddomain 重定向到主域

  • December 10, 2016

我重建了我的舊網站。該舊站點有一個子域:forum.example.com. 現在,它已經不存在了。訪問我網站的人forum.example.com應該被重定向到example.com.

我的.htaccess文件:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301] 

如果主機不是example.com,則重定向到example.com。不應該forum.example.com符合條件嗎?

現在對於問題的可選部分,如果有人可以向我解釋上述規則,那就太好了。

這是我對上述規則的理解:

如果主機不是example.com( !^example.com$)

重定向到http://example.com.

我不明白的是規則 regex: 的第一部分^(.*)$,然後是對它的引用($1)。為什麼匹配的所有內容都可以作為請求的文件路徑?它不會做這樣的事情嗎?

http://example.com/http://www.example.com/[requested file]
RewriteBase / 
RewriteCond %{HTTP_HOST} !^example.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

上面的程式碼查看連接瀏覽器的 HTTP 主機。請注意,.htaccess 只能處理可以到達網路伺服器的請求。這適用於forum.example.com,但前提forum.example.com是實際載入 .htaccess 文件所在目錄中的內容。如果您沒有設置 DNS 記錄(例如,*A 記錄或forumA 記錄),那麼它甚至不會完全訪問該站點,因為 DNS 無效。此外,必須設置 Apache 以載入該 VirtualHost 的站點。因此,它必須在 Apache 配置中列出,然後 .htaccess 才能按指定轉發 URL。

對於您的第二個問題,在RewriteRulepart^(.*)$中,這僅匹配從伺服器訪問的文件。該RewriteCond部分僅將規則應用於某些主機名,然後^(.*)$指定任何請求都遵循重寫規則。

所以上面的 .htaccess 程式碼將適用於/if host does not equal之後的所有請求example.com

如果您需要任何進一步的解釋,請告訴我。

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