Apache-2.2

apache上的虛擬主機指向domain.com,domain.net,domain.org都去domain.com

  • January 25, 2012

目前所有名稱都指向同一個 Web 伺服器文件夾,這是正確的。也就是說,domain.net、domain.org 等都可以在不重定向到主 .com 的情況下工作

如何訪問 .org 和 .net 以將瀏覽器重定向到 domain.com?

這應該是基本的,但我無法找出最好的方法。

我建議您使用RewriteRulefrommod_rewrite而不是使用Redirectfrom mod_alias。由於 mod rewrite 更加通用。

<VirtualHost *:80>
    ServerName domain.org
    ServerAlias www.domain.org domain.net www. domain.net
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www\.)?domain\.(net|org)$ [NC]
    RewriteRule ^ http://domain.com%{REQUEST_URI} [L,R=301]
</VirtualHost>

<VirtualHost *:80>
   ServerAdmin webmaster@dummy-host.example.com
   DocumentRoot /path/to/documentroot
   ServerName domain.com
   ServerAlias www.domain.com
   ErrorLog logs/dummy-host.example.com-error_log
   CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

確保您已NameVirtualHost *:80 取消註釋

解釋:


    RewriteEngine on

設置RewriteEngine開啟


    RewriteCond %{HTTP_HOST} ^(www\.)?domain\.(net|org)$ [NC]

匹配%{HTTP_HOST}:即:主機的基本 URL。欲了解更多資訊RewriteCondhttp headers訪問:RewriteCond[NC]是一個標誌:’nocase|NC’(無大小寫)

這使得測試不區分大小寫 - ‘AZ’ 和 ‘az’ 之間的差異在擴展的 TestString 和 CondPattern 中都被忽略了。此標誌僅對 TestString 和 CondPattern 之間的比較有效。它對文件系統和子請求檢查沒有影響。

此外,您還必須重定向以 WWW 開頭的 URL。這就是為什麼^(www\.)在模式中。


    RewriteRule ^ http://domain.com%{REQUEST_URI} [L,R=301]

domain.com如果發生匹配,則將 URL 重寫為RewriteCond。添加任何請求 URI(如果存在)。即這個請求的URI(相對於DOCUMENT_ROOT)。

如果 URl 是:domain.com/web/hello.php那麼REQUEST_URI=/web/hello.php


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