2009-05-21 13 views

回答

0

如果這是正確遞給它應該做的HTTP服務器上的別名,而不是在你的代碼.. .imo。

因此,當服務器聯繫時沒有www,它應該只是將其重定向到正確的URL。

+0

或如Andrew所述,使用CNAME – northpole 2009-05-21 16:29:55

+0

CNAME只是一個別名,它不會重定向到「其他」URL。在使用CNAME或A設置時,在http://example.com/中輸入時不會重定向到http://www.example.com/。 – 2009-05-21 16:43:32

+0

例如,在apache中,可以設置一個serverAlias來重定向傳入的請求。 CNAME告訴使用哪個服務器IP,serverAlias正確地指導流量。 – northpole 2009-05-21 17:00:36

-3

這最好通過管理域的DNS服務器上的A記錄(或CNAME記錄)來處理。你可以在代碼中處理它,但它確實不適合它。

+0

A和CNAME記錄無法重定向到另一個域。他們只能說一個域的IP地址是什麼。 CNAME只告知使用與另一個域相同的IP地址。 – 2009-05-21 16:38:17

2

處理此問題的最常見方法是在URL不是您所期望的情況下進行重定向。通常這是通過使用某種mod_rewrite模塊來完成的。

在ASP.NET MVC中,您必須儘早在請求生命週期中捕獲傳入請求,檢查URL並在必要時將(響應代碼301或302)重定向到正確的URL。

我從此博客文章中找到示例代碼:Canonical urls With ASP.NET MVC。它演示了實現該目標的一種方法:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    if (Request.Url.Authority.StartsWith("www")) 
     return; 

    string url = (Request.Url.Scheme 
     + "://www." 
     + HttpContext.Current.Request.Url.Authority 
     + HttpContext.Current.Request.Url.AbsolutePath 
    ); 

    Response.Clear(); 
    Response.Status = "301 Moved Permanently"; 
    Response.AddHeader("Location", url); 
    Response.End(); 
} 

對於那些我們做的事情有單聲道和Apache或使用mod_rewrite的擴展IIS的一個,這裏是一個mod_rewrite的例子:

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

以下這些關於創建A記錄或CNAME的建議只允許用戶從這兩個域訪問該網站,但它會減少您的Google果汁,因爲您在兩個不同的網址上擁有相同的內容。

2

如果您使用Microsoft IIS URL重寫模塊,那麼web.config中的以下條目將保持您的域一致。

<rewrite> 
      <rules> 
       <rule name="Consistent Domain" stopProcessing="true"> 
        <match url="^(.*)$" ignoreCase="false" /> 
        <conditions> 
         <add input="{HTTP_HOST}" pattern="^mediapopinc.com$" /> 
        </conditions> 
        <action type="Redirect" redirectType="Permanent" url="http://www.mediapopinc.com/{R:1}" /> 
       </rule> 
      </rules> 
     </rewrite> 
相關問題