什麼是最好的方式來重定向網站用戶誰不輸入www域名實際上得到www網站。正確的非www用戶到完整的www域名在ASP.Net MVC
IE:我轉到Google.com和我重定向到www.Google.com
什麼是最好的方式來重定向網站用戶誰不輸入www域名實際上得到www網站。正確的非www用戶到完整的www域名在ASP.Net MVC
IE:我轉到Google.com和我重定向到www.Google.com
如果這是正確遞給它應該做的HTTP服務器上的別名,而不是在你的代碼.. .imo。
因此,當服務器聯繫時沒有www,它應該只是將其重定向到正確的URL。
這最好通過管理域的DNS服務器上的A記錄(或CNAME記錄)來處理。你可以在代碼中處理它,但它確實不適合它。
A和CNAME記錄無法重定向到另一個域。他們只能說一個域的IP地址是什麼。 CNAME只告知使用與另一個域相同的IP地址。 – 2009-05-21 16:38:17
處理此問題的最常見方法是在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果汁,因爲您在兩個不同的網址上擁有相同的內容。
不應該忽略301重定向。 shahed khan寫了一篇很好的帖子來處理這種情況。 http://dotnetusergroup.com/blogs/shahedkhan/archive/2009/05/18/10229.aspx
如果您使用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>
或如Andrew所述,使用CNAME – northpole 2009-05-21 16:29:55
CNAME只是一個別名,它不會重定向到「其他」URL。在使用CNAME或A設置時,在http://example.com/中輸入時不會重定向到http://www.example.com/。 – 2009-05-21 16:43:32
例如,在apache中,可以設置一個serverAlias來重定向傳入的請求。 CNAME告訴使用哪個服務器IP,serverAlias正確地指導流量。 – northpole 2009-05-21 17:00:36