我正在嘗試使用類似於Handling legacy url's for any level in MVC的自定義路由(從RouteBase派生的類)編寫301重定向方案。我使用反射器在RedirectPermanent()方法中窺探了HttpResponse類,並注意到代碼都設置了狀態並輸出了一個簡單的HTML頁面。創建自定義301重定向頁面
this.StatusCode = permanent ? 0x12d : 0x12e;
this.RedirectLocation = url;
if (UriUtil.IsSafeScheme(url))
{
url = HttpUtility.HtmlAttributeEncode(url);
}
else
{
url = HttpUtility.HtmlAttributeEncode(HttpUtility.UrlEncode(url));
}
this.Write("<html><head><title>Object moved</title></head><body>\r\n");
this.Write("<h2>Object moved to <a href=\"" + url + "\">here</a>.</h2>\r\n");
this.Write("</body></html>\r\n");
這是可取的,因爲在我的經驗,並不是所有的瀏覽器都配置爲遵循301個重定向(儘管搜索引擎做的)。因此,如果瀏覽器沒有自動去那裏,也給用戶一個指向該頁面的鏈接是有意義的。
我想要做的就是將其提升到下一個層次 - 我想輸出MVC視圖的結果(連同其主題佈局頁面),而不是在響應中輸入硬編碼的醜陋通用HTML。喜歡的東西:
private void RedirectPermanent(string destinationUrl, HttpContextBase httpContext)
{
var response = httpContext.Response;
response.Clear();
response.StatusCode = 301;
response.RedirectLocation = destinationUrl;
// Output a Custom View Here
response.Write(The View)
response.End();
}
如何我寫一個視圖響應流的輸出?
其他信息
在過去,我們有問題,301 mydomain.com重定向到www.mydomain.com,並隨後得到了很多的報告,從用戶的SSL證書是無效的。搜索引擎完成了他們的工作,但用戶有問題,直到我切換到302重定向。我實際上無法複製它,但我們得到了大量的報告,所以我們必須做些事情。
我打算讓視圖做一個元重定向以及一個JavaScript重定向,以幫助提高可靠性,但對於那些仍然以301頁爲結尾的用戶,我希望他們有賓至如歸的感覺。我們已經有了自定義的404和500頁面,爲什麼不是自定義主題的301頁面呢?
哪些瀏覽器不支持301重定向? – jrummell 2013-03-05 21:26:32
@ jrummell:我知道很多插件(包括tinyurl的發展等等)停止重定向。雖然瀏覽器支持它,但用戶選擇退出是出於安全原因。 – 2013-03-05 21:27:30
這是否應該保護用戶免受網絡釣魚? – jrummell 2013-03-05 21:30:24