3

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

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

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

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

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

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

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

编辑

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

4

5 回答 5

2

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

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

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

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

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

于 2008-11-03T16:29:36.560 回答
2

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

于 2008-11-03T16:33:15.040 回答
2

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

bool isPageRewritten = 
   !string.IsNullOrEmpty(HttpContext.Current.Items["UrlRewriter.NET.RawUrl"]);
于 2008-11-17T03:29:38.777 回答
1

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

if (Path.GetFileName(Request.Url.FilePath) == "schedule.aspx")
   //Not rewritten
else
   //rewritten
于 2008-11-03T16:30:01.053 回答
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 路由框架,它比 urlrewriter.net IMO 更好。

于 2008-11-08T14:52:31.670 回答