如何确定asp.net网址是否已被“重写”?

时间:2008-11-03 16:21:20

标签: asp.net seo url-rewriting

我正在使用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重定向而不是使用元标记。也许我会这样做,但我仍然想知道基本问题的答案......我怎么知道页面是否已被重写?

5 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

除了chakrit的答案之外,看起来UrlRewriter.NET将原始URL存储在HttpContext中,名为 UrlRewriter.NET.RawUrl 的密钥。所以,你可以尝试类似的东西:

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

我认为这是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更好。