URL 重写器和动态页面结构
本文关键字:结构 动态 重写 URL | 更新日期: 2023-09-27 18:35:39
我正在开发一个允许用户即时创建和生成自己的页面的系统。
我正在将其与 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 重写器中有take after 2nd last /
规则,那就完美了。
我没有 URL 重写器安装来测试,但以下正则表达式可能会有所帮助:
.*/([^/]+?)/
我不使用
aspx,但如果可以的话,你最好使用类似的东西
<rewrite url=".?" to="/RoutingHandler.aspx" />
这绕过了正则表达式的 URL 重写(从而绕过了所有潜在的参数转义问题),因此RoutingHandler.aspx
您可以通过服务器变量访问原始请求的 URL。这样,您可以将正斜杠上的虚拟目录拆分为一个数组。您可以将数组映射到参数、数据库中的页面或任何您想要的内容。
.?
只是最快的匹配每个请求正则表达式。您可能需要调整它,以便它不会劫持静态内容请求。