apache - 將 suddomain 重定向到主域
我重建了我的舊網站。該舊站點有一個子域:
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 記錄或forum
A 記錄),那麼它甚至不會完全訪問該站點,因為 DNS 無效。此外,必須設置 Apache 以載入該 VirtualHost 的站點。因此,它必須在 Apache 配置中列出,然後 .htaccess 才能按指定轉發 URL。對於您的第二個問題,在
RewriteRule
part^(.*)$
中,這僅匹配從伺服器訪問的文件。該RewriteCond
部分僅將規則應用於某些主機名,然後^(.*)$
指定任何請求都遵循重寫規則。所以上面的 .htaccess 程式碼將適用於
/
if host does not equal之後的所有請求example.com
。如果您需要任何進一步的解釋,請告訴我。