代码之家  ›  专栏  ›  技术社区  ›  Keltex

如何判断asp.net url是否已被“重写”?

  •  3
  • Keltex  · 技术社区  · 16 年前

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

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

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

    我试图做什么(出于SEO目的)来动态添加meta标签:

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

    转到未重写的页面。这是因为我希望这两个网址都能正常工作,但只有重写的网址才能被搜索引擎索引。

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

    编辑

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

    5 回复  |  直到 16 年前
        1
  •  2
  •   Mitchel Sellers    16 年前

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

        2
  •  2
  •   jonnii    16 年前

    如果你需要这样做,你可能会做这样的事情:

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

    您可以在视图中检查标题,并在需要时添加robots元标记。

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

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

        3
  •  2
  •   Chris Fulstow    16 年前

    根据chakrit的回答,它看起来像UrlRewriter。NET将原始URL存储在HttpContext中的一个名为 URL重写器。网。RawUrl 。因此,您可以尝试以下操作:

    bool isPageRewritten = 
       !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]);
    
        4
  •  1
  •   TheSmurf    16 年前

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

    if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx")
       //Not rewritten
    else
       //rewritten
    
        5
  •  0
  •   chakrit Dutchie432    16 年前

    我认为这就是 HttpContext.Current.Items .

    您可以将“重定向”保存在HttpContext中。电流。项目,然后在您的页面中,您可以检查它是否具有某种附加值。

    我相信你可以在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.
    

    我早就把它留给ASP了。.NET路由框架。NET 3.5 SP1,它比urlrewriter.NET IMO更好。