26
2019.2

使用路由注意事项

作者: POPASP
POPASP的路由规则是不区分大小写的,除此之外,还要注意如下事项: ### 路由并不等同于伪静态 使用了路由后,地址栏传参进行了简化,但是这并不能消除`?`的使用,要实现真正的伪静态,在IIS下需要组件支持。由于IIS版本不同,伪静态的实现稍有不同,大家可以查阅其他相关内容,来实现真正的伪静态。由于POPASP的路由模式进行了路由规划,伪静态的规则书写变得更加简单。 ### 路由并不等同于真静态 POPASP由于实现了整页缓存功能,访问速度得到了极大的提升,再加上路由,有些人觉得这些可能就是真静态了。其实不然,POPASP框架,它毕竟是一个MVC框架,它并不能做到像iaspcms那样的专业CMS进行动态、静态的切换,做到静态页面的生成。iaspcms它可以将动态页面生成html页面,并且将所有链接重新规划成静态url地址。由于MVC不依赖于具体的项目,不依赖于具体的数据库,它的高度灵活性与便捷性,是为了开发项目更加容易一些。其实iaspcms就是使用POPASP3.1开发的一个cms项目。 ### 使用路由后取地址栏参数值要使用POP_MVC.get POPASP其实是将使用路由后的地址栏参数由中间量`POP_MVC.dQuery`进行存储,`POP_MVC.dQuery`是一个Dictionary对象。 比如使用路由后,URL地址为 ```brush:html http://serverName/index.asp?list_8 ``` 取值时,要使用 ```brush:vb page = POP_MVC.get("page") ``` 同地,POP_MVC.get也可以赋值 ```brush:vb POP_MVC.get("page") = 10 ``` 如果不使用路由模式,也可以使用POP_MVC.get来获取参数。 ### 使用路由后无法匹配的问题 如果路由后,如果URL地址无法匹配所有的规则,那么会使用默认的Controller与Action,系统默认的Controller与Action配置分别为: ```brush:vb ''默认控制器名 POP_MVC.config("DEFAULT_MODULE") = "Index" ''默认操作名 POP_MVC.config("DEFAULT_ACTION") = "index" ``` 所以,如果无法匹配所有规则,那么网站一般会指向首页,此时网站永远不会得到404无法访问。如果想自己指定404页面,那么就需要修改默认的控制器或默认的方法名,以便指向自定义404页面。 ### 路由的强制模式 一般情况下,我们不需要使用路由的强制模式,即将配置URL_MODE值设为1。 一旦使用了强制模式,那么像搜索这样的页面,也需要指定匹配模式。如果我们想在某些情况下不使用强制模式,可以这样设置 ```brush:vb ''URL访问模式支持 0 (普通模式); 1 (PATHINFO 模式); POP_MVC.config( "URL_MODE" ) = 1 private action action = LCase(request.querystring("a")) if action = "search" OR action = "tpl" OR action = "ajax" OR action = "removeproductcart" then POP_MVC.config( "URL_MODE" ) = 0 end if ''PATHINFO模式下的参数分割符 POP_MVC.config( "URL_DEPR" ) = "_" ''路由模式匹配规则 POP_MVC.config( "URL_RULE" ) = array( _ Array( "^list_[1-9]\d*_[1-9]\d*$" , "a_SortID_page" ) _ ,Array( "^list_[1-9]\d*$" , "a_SortID" , "page=1") _ ,Array( "^about_[1-9]\d*_[1-9]\d*$" , "a_SortID_page" ) _ ,Array( "^about_[1-9]\d*$" , "a_SortID" , "page=1" ) _ ,... _ ) ``` 上面的代码引用了iaspcms前台的路由设置。它首先设置了路由模式为强制模式,在设置规则之前,使用if判断指定某些情况下不使用路由模式,不使用路由模式,那么接下来指定的路由规则不起作用。