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

Posted

技术标签:

【中文标题】如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?【英文标题】:How can I store location data in the url for all pages on my asp.net site using url rewriting? 【发布时间】:2009-11-07 20:15:49 【问题描述】:

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

我想针对 SEO 优化我的网站。例如,我有一个包含三个页面的网站:

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

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

我可以通过会话或 cookie 来完成所有这些工作,但是对于 SEO,我需要应对搜索机器人。我很确定 URL 重写是要走的路,但是我发现的示例(而且它们很多)处理简单的东西,例如 /products/umbrellas 或 /books/authors/spolsky。它 - 感觉 - 比这更复杂(也许更简单......让我直截了当)。

我最初的想法是我需要某种形式的 URL 重写处理程序或模块,以便我可以开始使用诸如 mysite.net/WA/Seattle/Pike_Pl 之类的 URL。然后,一旦确定了位置,站点中的所有内部 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】:

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

然后是url重写的问题。我会让网址如下所示:

http://siteurl.com/events/AREA/CITY/STREET http://siteurl.com/news/AREA/CITY/STREET

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

然后使用任何可用的开源 UrlReWriters 来捕获像 http://siteurl.com/events/AREA/CITY/STREET 和 http://siteurl.com/news/AREA/CITY 这样的 URL /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/event/EVENTNAME 之类的 url 指向实际事件(注意 url 中 /event 后面缺少的 's')。将当前选定的区域/城市/街道保存在会话中,并在用户使用 SetLocation.ascx 控件对其进行更改时对其进行更新。

【讨论】:

很好的建议。如果没有通过链接选择位置的页面,搜索机器人如何索引所有区域的内容。我还在学习 SEO,所以请原谅新手。 创建一个仅包含所有可能的区域/城市/街道链接到新闻和事件的页面,将其包含在 google 站点地图或 robots.txt 文件中。 另外,您可以让 SetLocation 控件使用简单的链接,这样 google 就可以像普通用户一样关注这些链接。

以上是关于如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中重写 URL?

ASP.NET 回发在 URL 重写中产生问题?

是否可以在经典 asp 中进行友好的 url(url 重写)?

读取解决方案数据文件 ASP.Net Core

如何在 asp.net 中将 URL 重写为子域而不实际在服务器上创建子域

ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL