65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 ASP.NET (C#) 进行 URL 伪装

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.82/5 (9投票s)

2005年4月10日

2分钟阅读

viewsIcon

80275

一篇简短的文章,介绍如何在 ASP.NET 中使用简洁的 URL 替换冗长且难看的查询字符串 URL。

引言

如今,内容管理系统 (CMS) 是一种商品。这些系统使普通用户能够创建和维护网站,而无需任何技术技能。通常,CMS 是使用数据库构建的,并且通过如下 URL 访问在 CMS 中创建的站点中的页面

http://www.somecompany.com/Templates/page1213___.aspx

http://www.somecompany.com/content.aspx?pageID=1213 等。

对于有经验的用户来说,这真的无关紧要,但从可用性的角度来看 - 这是不允许的!如果您是一位正在寻找信息的普通用户,那么像下面这样的 URL 可能会更有意义

http://www.somecompany.com/product

http://www.somecompany.com/support

这就是 URL 伪装派上用场的地方。

背景

要尝试这个技巧,请在 VS.NET 中创建一个空解决方案,添加一个 C# ASP.NET Web 应用程序(称其为“Cloaking”)。创建并添加 404.aspxcontent1.aspxcontent2.aspxcontent3.aspx 到您的解决方案。确保用一些内容填充它们,以便您可以将它们彼此区分开来。

您的解决方案资源管理器应该看起来像这样

Solution Explorer

设置自定义 404 错误页面

为了实现这个技巧,您需要配置 IIS 以使用自定义的 404 错误页面(在本例中为 404.aspx)。为此,请转到 IIS 管理控制台,选择正确的网站(在本例中,该网站名为“Cloaking”)。右键单击它,然后选择“属性”,然后选择“自定义错误”选项卡。

Website Properties

在错误列表中找到 404 条目,然后单击“编辑属性”。在“消息类型”下拉列表中选择“URL”,并在 URL 文本框中键入 404.aspx 页面的完整路径,在本例中为“/Cloaking/404.aspx”。

它应该看起来像这样

Error Mapping Properties

切换回 VS.NET,打开 Global.asax 文件并查看代码。向下滚动到 Application_BeginRequest 方法并粘贴以下内容

// The requested URL

string strURL = Request.RawUrl.ToLower(); 
    
// If the page didnt exist, the IIS tries to send the visitor to 404.aspx, 

//this is where we intercept.

if(strURL.IndexOf("404.aspx") > 0) 
{ 
    // Scan the path for the keywords and rewrite the path to the preferred content

    if (strURL.IndexOf("products") > 0) Context.RewritePath("content1.aspx");
    if (strURL.IndexOf("sales") > 0) Context.RewritePath("content2.aspx");
    if (strURL.IndexOf("support") > 0) Context.RewritePath("content3.aspx");
}

..就是这样!

如果您浏览 https:///Cloaking/Products,浏览器将显示 content1.aspx 的内容,并在地址字段中保持友好的 URL。

该代码使用 strURL.IndexOf() 方法来检测关键字,这有点粗糙,只是为了说明该技术。

URL 伪装的良好使用

为了更好地利用这个技巧,您需要在一个 CMS 系统中实现它。为了说明可能的用法,在您的 CMS 中,您可能有一个包含网站页面的表。使用名为“path”的列扩展 pages 表,并在 application_beginrequest 方法中搜索该列,以查找要重定向到的相应页面。

听起来很有趣吗?发表评论,也许我会发布一个实现 URL 伪装的简单 CMS。

历史

  • 2005-04-10:创建
© . All rights reserved.