【问题标题】:URL Rewriter and dynamic page structureURL重写器和动态页面结构
【发布时间】:2013-06-22 23:01:00
【问题描述】:

我正在开发一个允许用户即时创建和生成自己的页面的系统。

我将它与 URL 重写器连接起来,以便我可以通过单个页面访问页面,该页面将通过查询字符串传递页面名称/ID。这是我知道我可以使用的简单部分:

<rewrite url="/(.+)/" to="/GenericPage.aspx?PageName=$1" />

现在是有趣的部分。用户还可以创建具有子页面和/或子文件夹的文件夹。这些文件夹可以有 n 个深度,并且它们的深度没有限制。我主要实现了这一点,因为该结构将生成一个顶部导航,这些文件夹是顶级菜单选项和子文件夹等。

我是否可以使用重写规则来考虑在我需要的页面之前可能有大量文件夹的规则?我不想创建多个规则,因为它看起来很脏并且依赖于最大数量的文件夹。

**What I'm trying to avoid**
<rewrite url="/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$2" />
<rewrite url="/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$3" />
<rewrite url="/(.+)/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$4" />
<rewrite url="/(.+)/(.+)/(.+)/(.+)/(.+)/" to="/GenericPage.aspx?PageName=$5" />
<!-- Where the additional (.+) are representative of folders -->

我似乎被这个难住了(也许我今天有点累)。

如果 URL Rewriter 中有 take after 2nd last / 规则就完美了。

【问题讨论】:

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


    【解决方案1】:

    我没有安装 URL Rewriter 来测试,但以下正则表达式可能会有所帮助:

    .*/([^/]+?)/
    

    【讨论】:

      【解决方案2】:

      我不使用 aspx,但如果可以,最好使用类似的东西

      <rewrite url=".?" to="/RoutingHandler.aspx" />
      

      这绕过了正则表达式的 URL 重写(以及所有潜在的参数转义问题),因此在 RoutingHandler.aspx 中,您可以通过服务器变量访问原始请求的 URL。有了它,您可以将正斜杠上的虚拟目录拆分为一个数组。您可以将数组映射到参数、数据库中的页面或任何您想要的。

      .? 是最快匹配每个请求的正则表达式。您可能需要对其进行调整,使其不会劫持静态内容请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        相关资源
        最近更新 更多