URL重写器和动态页面结构

时间:2012-05-30 10:50:13

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

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

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

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

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

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

**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重写器中有take after 2nd last /规则,那将是完美的。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我不使用aspx但是,如果可以,你最好使用像

这样的东西
<rewrite url=".?" to="/RoutingHandler.aspx" />

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

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