【问题标题】:How do I determine if an asp.net url has been "rewritten"?如何确定 asp.net url 是否已“重写”?
【发布时间】:2010-09-20 12:34:18
【问题描述】:

我正在使用http://urlrewriter.net/ 重写我网站上的网址。比如我在重写:

http://www.example.com/schedule.aspx?state=ca

到

http://www.example.com/california.aspx

我正在尝试做什么(出于 SEO 目的)以动态添加元标记:

<meta name="robots" content="noindex,follow" />

仅到尚未重写的页面。这是因为我希望两个 URL 都可以工作,但只有重写的 URL 才能被搜索引擎索引。

如何确定请求的页面版本?

编辑

以下答案建议使用 301 重定向而不是使用元标记。也许我会这样做,但我仍然想知道潜在问题的答案......我如何知道页面是否已被重写?

【问题讨论】:

    标签: asp.net seo url-rewriting


    【解决方案1】:

    如果您需要这样做,您可以执行以下操作:

    <add header="X-WasRewritten" value="true" />
    

    如果需要,您可以检查视图中的标题并添加机器人元标记。

    这也会返回给客户端,所以如果你想隐藏它,你可以编写一个 CustomAction (http://urlrewriter.net/index.php/support/reference/actions/custom-action),它将在你的请求中设置某种状态值。

    但是,我不建议为同一资源使用两个 URI。我建议你只保留一个表示。如果您担心旧书签失效,可以将旧书签设置为重定向到新书签。

    【讨论】:

      【解决方案2】:

      最明显的方法是使用页面中的 Request.Url 对象来获取有关 URL 和查询字符串的信息。例如:

      if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx")
         //Not rewritten
      else
         //rewritten
      

      【讨论】:

      • 我不确定这是否适用于 urlrewriting.net,因为重写会将 url 转换回正常格式以供应用程序使用。
      【解决方案3】:

      就个人而言,我会 301 从未重写的页面重定向到重写的页面,并且只使用页面的单个副本。这对用户来说更容易,而且从 SEO 的角度来看,您拥有 1 个内容副本。

      【讨论】:

      • 这绝对是一个选项,但我也想探索 nofollow 选项。
      • 另外,请务必记住,如果未写入的页面具有页面排名,则使用不关注将失去该页面排名并隐藏该页面。如果您使用 301,它将转移。
      • 这是一个很好的观点。我认为我的问题仍然相关。如何确定请求是否针对重写页面?如果不重写,那么我 301.
      【解决方案4】:

      我认为这是HttpContext.Current.Items 的工作。

      您可以将“重定向”保存在 HttpContext.Current.Items 中,然后在您的页面中,您可以检查它是否具有一定的附加值。

      我相信您可以在 urlrewriter.net 中添加可以做到这一点的钩子:

      HttpContext.Current.Items["Redirected_From"] = currentUrlHere;
      

      然后在您的网页中,您可以通过以下方式进行检查:

      if (!string.IsNullOrEmpty(HttpContext.Current.Items["Redirected_From"]))
          // the page's been redirected, do something!
      else
          // no it's visited normally.
      

      我早就把它留给了 .NET 3.5 SP1 中的 ASP.NET Routing 框架,它比 urlrewriter.net IMO 更好。

      【讨论】:

        【解决方案5】:

        除了 chakrit 的回答,看起来 UrlRewriter.NET 将原始 URL 存储在 HttpContext 中,在一个名为 UrlRewriter.NET.RawUrl 的键中。因此,您可以尝试以下方法:

        bool isPageRewritten = 
           !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2010-09-30
          • 2011-04-05
          • 2010-10-19
          • 1970-01-01
          相关资源
          最近更新 更多