在 asp.net 中更推荐的 301 重定向方式是啥?

Posted

技术标签:

【中文标题】在 asp.net 中更推荐的 301 重定向方式是啥?【英文标题】:What is the more recommended way to 301 redirect in asp.net?在 asp.net 中更推荐的 301 重定向方式是什么? 【发布时间】:2012-02-05 01:16:16 【问题描述】:

我用谷歌搜索了所有内容,并阅读了大量不同的回复——有些我试图暗示但没有成功。我不是专业的程序员,但我感谢论坛里的人们教了我很多东西,从 jquery 到 doctypes 等等!

我有一个用 VWD 2010 Express 开发的网站。我只想知道两件事:

    我知道搜索引擎/重复内容同时拥有 yourdomain 和 www.yourdomain 是不好的,所以我想设置一个 301 重定向,这样如果最终用户在 mydomain 中键入,它们会自动重定向到 www.mydomain(带有 www)。

    我移动了一些不在根目录中但在文件夹中的页面。所以我想用新位置替换过时的页面。我想通过自动将它们从 www.mydomain/services/engineering.aspx 重定向到 www.mydomain/products/engineering.aspx 来做到这一点。

    李>

这很难吗?是 (推荐) 使用 .htaccess、web.config 还是其他?

感谢您花时间阅读本文,我真诚地感谢任何和所有反馈。

杰森·韦伯

【问题讨论】:

【参考方案1】:

除非我误解了 .htacess 是用于 Apache 的,并且如果您在 ASP.Net 中进行编码,那么您几乎肯定会使用 IIS。因此,请忽略您研究中的 .htaccess 内容。

您可以使用某种 URL 重写器进行重定向,但这会变得非常复杂。如果我是你,我会尽可能简单,并在 Page_Load 事件中进行旧页面 301 重定向,即

protected void Page_Load(object sender, System.EventArgs e)

   Response.Status = "301 Moved Permanently";
   Response.AddHeader("Location","http://www.domainname.com/new-page.aspx");

对于您的规范重定向(非 www 到 www),您可以在 Application_BeginRequest 的 Global.asax 文件中执行类似操作,以检测非 www 变体,即

if (HttpContext.Current.Request.Url.ToString().ToLower().Contains( 
    "http://mysite.com")) 
 
    HttpContext.Current.Response.Status = "301 Moved Permanently"; 
    HttpContext.Current.Response.AddHeader("Location", 
        Request.Url.ToString().ToLower().Replace( 
            "http://mysite.com", 
            "http://www.mysite.com")); 
 

(这不是我的代码,它来自here)

无论如何我都会这样做 - 它的好处是易于理解,并且让您远离任何奇怪的网络服务器配置,我有时会发现它有点像黑匣子。

【讨论】:

非常好的信息,螃蟹——非常感谢!因为我在 Windows 服务器上,所以我因为不认识 .htaccess/apache 的东西而感到很愚蠢。信息和链接非常好 - 对我的情况的完美建议。这些重定向不应该太难实现。再次感谢您的宝贵时间! @JasonWeber 完全没问题。祝你一切顺利 @CrabBucket 如果我们将此代码放在页面 PreLoad 而不是页面 Load 上会导致任何问题吗?这会影响在社交媒体上共享的 URL(打开图表)吗?【参考方案2】:

由于您使用的是 VWD 2010 Express,因此您将受益于使用 .NET4 方法 Response.RedirectPermanent(stringURL)。它是 HttpResponse 对象的一部分。

此处提供更多文档: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectpermanent.aspx

此函数与 Response.Redirect() 相同,但它会在执行重定向的同时向客户端发出 301 代码。

【讨论】:

那是完美而简单的——非常感谢凯尔的回复和链接! 是的,我在 .net4.0 框架上,所以这是一个完美的解决方案。【参考方案3】:

在您希望通过 301 重定向的地方执行此操作

string url = "newpage.aspx";
        Response.Clear();
        Response.StatusCode = 301;
        Response.RedirectLocation = url.ToLower();
        Response.End();

然后使用 Chrome 中的检查工具并检查“网络”选项卡以查看状态代码。 它对我有用。

【讨论】:

以上是关于在 asp.net 中更推荐的 301 重定向方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 2005 中的 301 永久重定向

如何在 ASP.Net MVC 中执行 301 永久重定向路由

如何在 ASP.NET 4.0 中进行 301 重定向?

301 重定向 ASP.NET IIS

ASP.NET IIS7 的永久 301 重定向

asp.net mvc,做 301 永久重定向