ASP.NET中301重定向的更推荐方法是什么?

6
我已经谷歌了所有的东西,并且读了很多不同的回答——有些我尝试过但没有成功。我不是专业程序员,但我感谢这个论坛的人们教给我很多关于从jquery到文档类型等各种知识!
我有一个在VWD 2010 Express中开发的网站。我只想知道两件事:
1. 我知道对于搜索引擎/重复内容来说,同时拥有yourdomain和www.yourdomain是不好的,所以我想设置301重定向,以便如果终端用户键入mydomain,则自动将其重定向到www.mydomain(带有www)。
2. 我移动了一些不在根目录中而是在文件夹中的页面。因此,我想用新位置替换过时的页面。我想通过自动重定向他们从www.mydomain/services/engineering.aspx到www.mydomain/products/engineering.aspx。
这难吗?使用.htaccess、web.config或其他东西是否推荐?
谢谢您花时间阅读这篇文章,我真诚地感谢任何和所有的反馈。
Jason Weber
3个回答

8

除非我误解了,.htaccess是针对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),您可以在 Global.asax 文件中的 Application_BeginRequest 中执行类似的操作来检测非 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")); 
} 

这不是我的代码,它来自这里

无论如何,我会做出以下操作-这样有助于易于理解并且可以避免任何奇怪的Web服务器配置问题,有时我认为这是一个黑匣子。


非常感谢你提供的优秀信息,Crab!我感到有些愚蠢,没有意识到这个.htaccess / apache的问题,因为我使用的是Windows服务器。这些信息和链接都非常好,对我的情况来说是完美的建议。这些重定向应该不难实现。再次感谢你的时间! - Jason Weber
@JasonWeber 没问题。祝你一切顺利。 - Crab Bucket
@CrabBucket 如果我们将这段代码放在页面的 PreLoad 而不是 Load 上,会有任何问题吗?这会影响社交媒体上分享的 URL(开放图形协议)吗? - Rami Zebian

6

太好了,非常简单 - 谢谢你的答复和链接,Kyle! - Jason Weber
是的,我正在使用.net4.0框架,所以这是一个完美的解决方案。 - Jason Weber

-1

在需要进行301重定向的位置执行此操作

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

然后使用 Chrome 的检查工具,在“网络”选项卡上检查状态码。 这对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接