URL重写,实质上是将网页真实URL隐藏起来,使用户通过相应的虚拟URL访问网页资源,以便克服真实URL的许多不足。IIS Rewrite的工作原理请看下图:
DTcms的HttpModule类位于DTcms.Web.UI项目下,它是整个站点的URL请求的核心,每次URL发起的请求都会经过它负责重写分配。我们可以从站点下的Web.config文件中看到一个如下的节点:
<httpModules>
<add type="DTcms.Web.UI.HttpModule, DTcms.Web.UI" name="HttpModule" />
</httpModules>
无论你想获得网站的一个页面或者是一张图片,都会经过HttpModule这个类处理,它就像是作战的总指挥,它负责分配每个HTTP请求的去向。
DTcms的URL重写表达式
DTcms的URL重写表达式,我们暂且称它为URL字典。我们在后台所做的一切修改,都会保存在一个XML文件中,它位于DTcms.Web项目的xmlconfig文件夹下的urls.config文件。当然,为了性能和效率有所提升,系统将会读取该文件中的内容进行续存,当文件进行修改时,续存自动更新。
Rewrite属性说明:
属性 | 说明 | 示例 |
---|---|---|
name | 该条URL重写表达式调用的名称,该属性值不允许重复,一般在前台模板做链接时使用到。 | <%linkurl(“news_list”)%> |
type | 系统会根据页面类型做不同的URL重写处理,也会根据页面类型继承不同的类。 |
可选值有:
|
page | 后台生成模板时,读取模板文件经过解析后,保存成aspx动态页面的文件名。 | news_list.aspx |
inherit | 后台生成模板时,在保存成aspx动态页面时,头部要继承的类名,全局限定名。 | DTcms.Web.UI.Page.article_list |
templet | 后台生成模板时,该aspx页面对应的模板文件名,系统自动寻找该模板文件读取内容。 | news_list.html |
channel | 该条URL归属的频道名称,系统会自动生成,无需手动填写,如果不属于频道则可以忽略该属性。 | news |
item子节点属性说明:
属性 | 说明 | 示例 |
---|---|---|
path |
URL重写表达式 {0}表示第一个参数的值{n}表示第N个参数的值 |
news/{0}/{1}.aspx <!—表示有两个参数--> |
pattern |
URL重写正则表达式 和path是对应的,只不过上面用的是{n}表示,而这里用(正则表达式)表示 |
news/(\d+)/(\w+).aspx <!—对应两个正则表达式分组--> |
querystring |
该URL所带的参数 参数名称=$1,$1表示第一个参数的值,如有多个参数用^连接起来。 |
category_id=$1^page=$2 <!—第一个参数是类别ID,第二个参数是分页页码--> |