1

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

我将它与 URL Rewriter 连接起来,以便我可以通过单个页面访问页面,该页面将通过查询字符串传递页面名称/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 -->

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

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

4

2 回答 2

0

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

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

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

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

于 2012-05-30T12:47:31.363 回答
0

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

.*/([^/]+?)/
于 2012-05-30T11:16:54.627 回答