【问题标题】:Setting up 301 redirects with Dynamic URLs使用动态 URL 设置 301 重定向
【发布时间】:2026-02-08 07:30:01
【问题描述】:

我猜这实际上是一项不可能完成的任务,但我想我会通过 * 运行它,看看我是否错了。基本上,我们有一些动态创建的用于 SEO 的 URL(大约 300,000 多个),我们希望对它们进行 301 重定向

我们当前的 URL 如下所示:

http://www.site.com/<Brand>/<Product Name>/<productGuid>

我们的网址看起来像这样:

http://www.site.com/productpage.aspx?productGUID=<productGuid>

Google 仍然有大量 网址被编入索引,但我们显然希望他们知道应该用我们的新网址替换它们(而且这不仅仅是重复的内容),因此 301重定向。

我们的问题是,新 URL 的 <Brand><Product Name> 部分显然是动态创建的……因此无法为它们创建 301 重定向。

或者不可能吗?

感谢您对我们如何让 Google 开始将其已编入索引的 URL 更新为新 URL 的任何想法或建议。

【问题讨论】:

  • 您可以发布您正在使用的正则表达式规则吗?

标签: asp.net iis-7 web-config windows-server-2008 http-status-code-301


【解决方案1】:

为您的产品页面创建一个新的内部名称,例如:ProductPageInternal.aspx。

将所有 ProductPage.aspx 流量重写到一个 Redirect.aspx 页面,其中包含 301 重定向代码到新的、漂亮的 url。(thekaido 的想法)

将所有新 URL 重写为 ProductPageInternal.aspx。

<rewrite url="~/ProductPage.aspx?GUID=(.+)" to="~/Redirect.aspx?productGUID=$1" /> 
<rewrite url="~/(.+)/(.+)/(.+)" to="~/productpageInternal.aspx?productGUID=$3" /> 

【讨论】:

    【解决方案2】:

    在您的 productpage.aspx 页面的代码上,设置 Response.StatusCode 和 Response.RedirectLocation 并结束 Response。

    Response.StatusCode = 301;
    Response.RedirectLocation = "http://www.site.com/<Brand>/<Product Name>/<productGuid>";
    Response.End();
    

    【讨论】:

    • 感谢您的回复,但页面只是重定向自身,即使它是由新 URL 而不是旧 URL 调用的。关于如何阻止这种情况发生的任何想法?
    • 如果重定向来自旧网址,请尝试仅进行重定向。
    • 是的,我想知道我该怎么做呢?谢谢。
    • 好吧,稍后搜索一下:Request.Url.AbsoluteUri。不幸的是,它揭示了(令人惊讶的)旧 URL 是服务器看到的。换句话说,我不知道如果服务器被旧 URL 或新 URL 调用,它怎么可能。
    • 您是如何设置到新网址的路由的?这是 Web 表单还是 mvc?