如何使用url重写将位置数据存储在我的asp.net网站上所有页面的URL中?

时间:2009-11-07 20:15:50

标签: c# asp.net url-rewriting geolocation

使用{ASP.NET 3.5,Windows Server 2003,IIS 6}

我想优化我的网站搜索引擎优化。为了举例,我有一个有三页的网站:

  • /news.aspx - 列出新闻文章的页面
  • /events.aspx - 列出活动的页面
  • /location.aspx - 确定用户地理位置的页面

如果用户首先访问/news.aspx或/events.aspx而未先访问/location.aspx,则会看到未经过滤的内容(所有新闻报道或所有事件)。为了缩小范围,用户转到/location.aspx。位置页面列出了用户可以单击的状态。当用户点击某个州时,他会获得一个城市列表。当用户点击一个城市时,他会得到一个街道列表。当用户点击街道时,他将被带回/news.aspx,但他看到的内容现在按位置过滤。如果用户单击/events.aspx页面,也会发生同样的情况。

我可以通过会话或cookie完成所有这些,但是,对于搜索引擎优化,我有搜索机器人可以应对。我很确定网址重写是要走的路,但我找到的例子(并且它们很多)处理简单的东西,如/ products / umbrella或/ books / authors / spolsky。它 - 感觉 - 比这更复杂(也许它更简单......让我直截了当)。

我最初的想法是我需要某种形式的URL重写处理程序或模块,以便我可以开始使用像mysite.net/WA/Seattle/Pike_Pl这样的网址。然后,一旦确定了位置,站点中的所有内部URL都将具有其中的位置...到达/events.aspx,该链接实际上将指向mysite.net/WA/Seattle/Pike_Pl/events。 ASPX。处理程序将从url路径中获取位置信息,并将url重写为/events.aspx?state=WA&city=Seattle&street=Pike_Pl。对于我的网站中的/news.aspx或任何其他位置敏感页面也是如此。

如果你做过类似的事情,我们将非常感谢代码示例。

拜伦

1 个答案:

答案 0 :(得分:1)

创建一个可以放在所有提到的页面上的控件,允许进行“就地”过滤会不会更容易?

然后重写网址的问题。我希望网址如下所示:

事件和新闻页面都有控件“SetLocation.ascx”。现在没有必要先访问location.aspx页面,使用该控件来获取这些设置。

使用任何可用的开源UrlRewrite来捕捉http://siteurl.com/ 事件 / AREA / CITY / STREET和http://siteurl.com/ 新闻等网址/ AREA / CITY / STREET并将它们映射到带有正则表达式的内部URL(大多数(如果不是所有的urlrewriters都使用)),如下所示:

<rewrite url="~/Events/(.+)" to="~/Event.aspx?area=$1" />
<rewrite url="~/Events/(.+)/(.+)" to="~/Event.aspx?area=$1&amp;city=$2" />
<rewrite url="~/Events/(.+)/(.+)/(.+)" to="~/Event.aspx?area=$1&amp;city=$2&amp;street=$3" />

然后使用类似http://siteurl.com/ 事件 / EVENTNAME的网址指向实际事件(请注意网址中/ event之后缺少的's')。在会话中保存当前选定的区域/城市/街道,并在用户使用SetLocation.ascx控件更改它时更新它。