在 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 重定向方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章