【问题标题】:ASP.NET URL Rewriting for query strings查询字符串的 ASP.NET URL 重写
【发布时间】:2012-03-08 15:46:16
【问题描述】:

为了一个更加用户友好的环境,我希望删除页面扩展并且查询字符串不可见。例如,来自http://www.example.com/news.aspx?id=123 我希望它是http://www.example.com/news/123。如何获得?

我还想借此机会提出另外两个问题:

  • 使用 URL 重写时,是否必须为每个页面指定规则?
  • 在 ASP.NET 中重写 URL 哪个更好 - .htaccess 文件或 web.config 中的规则设置?

谢谢。

【问题讨论】:

    标签: asp.net url-rewriting


    【解决方案1】:

    您可以为此目的使用 ASP.Net MVC 中引入的 URL 路由类。这些类可以在任何 .Net Web 应用程序中使用,并且不限于 MVC 版本。

    使用“System.Web.Routing”命名空间,您可以将路由定义为规则,例如:

    routes.MapPageRoute(
          "News Category",   // Route name
          "News/{*ID}",      // Route URL
          "~/News.aspx"      // Web page to handle route
       );
    

    您在 global.asax 应用程序启动事件中注册这些“路由”的方式与在 MVC 中相同。

    这将允许http://www.domain.com/news/123 在您的网络应用程序中以与http://www.domain.com/news.aspx?id=123 相同的方式被解释。

    Here's a recent article on using the MVC routing namespace in a traditional aspx application.

    【讨论】:

      【解决方案2】:
      • 使用 URL 重写时,是否必须为每个指定规则
        页?

      大多数 URL 重写机制都不允许使用正则表达式来组合 URL 以使用一个特定的规则。

      • 哪个更适合在 ASP.NET 中用于 URL 重写 -
        .htaccess 文件还是 web.config 中的规则设置?

      当使用 IIS 7 或更高版本时,可以使用 IIS URL Rewrite 模块,见http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/

      当使用 IIS 6 或更低版本时,我更喜欢来自:http://www.urlrewriting.net/ 的 URL 重写模块,但您也可以使用其他模块。

      【讨论】:

      • 不错的建议,但这些建议取决于 IIS 的版本或额外的模块。 System.Web.Routing 命名空间是 .Net 框架内正式实现的命名空间,正是为此目的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      相关资源
      最近更新 更多