URL重写,实质上是将网页真实URL隐藏起来,使用户通过相应的虚拟URL访问网页资源,以便克服真实URL的许多不足。IIS Rewrite的工作原理请看下图:

    XHTcms的HttpModule类位于XHTcms.Web.UI项目下,它是整个站点的URL请求的核心,每次URL发起的请求都会经过它负责重写分配。我们可以从站点下的Web.config文件中看到一个如下的节点:

<httpModules>
    <add type="XHTcms.Web.UI.HttpModule, XHTcms.Web.UI" name="HttpModule" />
</httpModules>

201610180100007521.png

    无论你想获得网站的一个页面或者是一张图片,都会经过HttpModule这个类处理,它就像是作战的总指挥,它负责分配每个HTTP请求的去向。

       XHTcms的URL重写表达式

    XHTcms的URL重写表达式,我们暂且称它为URL字典。我们在后台所做的一切修改,都会保存在一个XML文件中,它位于XHTcms.Web项目的xmlconfig文件夹下的urls.config文件。当然,为了性能和效率有所提升,系统将会读取该文件中的内容进行续存,当文件进行修改时,续存自动更新。

Rewrite属性说明:

                属性                说明                示例
                name                该条URL重写表达式调用的名称,该属性值不允许重复,一般在前台模板做链接时使用到。                <%linkurl(“news_list”)%>
                type                系统会根据页面类型做不同的URL重写处理,也会根据页面类型继承不同的类。

可选值有:

  1.                             index:首页

  2.                             list:列表页

  3.                             detail:详细页

  4.                             category:栏目页

  5.                             plugin:插件页

  6.                             other:其它页

                page                后台生成模板时,读取模板文件经过解析后,保存成aspx动态页面的文件名。                news_list.aspx
                inherit                后台生成模板时,在保存成aspx动态页面时,头部要继承的类名,全局限定名。                XHTcms.Web.UI.Page.article_list
                templet                后台生成模板时,该aspx页面对应的模板文件名,系统自动寻找该模板文件读取内容。                news_list.html
                channel                该条URL归属的频道名称,系统会自动生成,无需手动填写,如果不属于频道则可以忽略该属性。                news

item子节点属性说明:

                属性                说明                示例
                path

URL重写表达式

{0}表示第一个参数的值
{n}表示第N个参数的值
                news/{0}/{1}.aspx
<!—表示有两个参数-->
                patternURL重写正则表达式
和path是对应的,只不过上面用的是{n}表示,而这里用(正则表达式)表示
                news/(\d+)/(\w+).aspx
<!—对应两个正则表达式分组-->
                querystring该URL所带的参数
参数名称=$1,$1表示第一个参数的值,如有多个参数用^连接起来。
                category_id=$1^page=$2
<!—第一个参数是类别ID,第二个参数是分页页码-->