<code>是这样的,最近项目越来越大 包括 手机端 微信嵌入网站 支付宝服务窗嵌入网站 PC端(下面有很多二级域名 比如 passport api service) 等等 我在考虑 是不是要把整站的url 路径 都写入到一个表里面 然后用统一的一个函数 来调用url 否则的话 比如说 http:xxx/article 这个详细页面 url 站内各个模块都有关联 如果这个url更改了 那么代码里面 很多关于这个页面的 url 定向 都要修改 我在考虑是不是 把所有的url (包括 后台和前台) 都集中到一个表 里面 管理 然后每个url 对应有 权限 别名 rewrite 等等属性 这样 调用的时候 比如说这个 geturl("article") 根据article这个别名 来调用 url 不管url怎么改变 还是 做了 rewrite 都不用改代码了 不知道各位大神是怎么做的呢? </code>
<code>是这样的,最近项目越来越大 包括 手机端 微信嵌入网站 支付宝服务窗嵌入网站 PC端(下面有很多二级域名 比如 passport api service) 等等 我在考虑 是不是要把整站的url 路径 都写入到一个表里面 然后用统一的一个函数 来调用url 否则的话 比如说 http:xxx/article 这个详细页面 url 站内各个模块都有关联 如果这个url更改了 那么代码里面 很多关于这个页面的 url 定向 都要修改 我在考虑是不是 把所有的url (包括 后台和前台) 都集中到一个表 里面 管理 然后每个url 对应有 权限 别名 rewrite 等等属性 这样 调用的时候 比如说这个 geturl("article") 根据article这个别名 来调用 url 不管url怎么改变 还是 做了 rewrite 都不用改代码了 不知道各位大神是怎么做的呢? </code>
这个可以有,最好是将mysql的url缓存到memcache或redis,不然每个请求到去查表的话,性能就不好了。
可以这样做,点评很长一段时间就是如此的。
现在因为有了SLB,软负载均衡,所以配置变的复杂了,基本都在SLB层面上做掉了。
另外这样的好处还有就是方便AB Test等同URL的应用切换。
不过有几点要注意:
1、URL匹配规则的顺序,有时会出现先前的规则覆盖后面的规则,那么URL路由就到不到后面规则的解析器。
2、URL匹配的性能,灵活利用多种匹配规则,例如starts_with, ends_with,等以及正则的写法对性能的影响。
3、楼上提到放到memcached或redis里,其实因为URL规则的访问密集性以及整体不会太大,反而是建议就放在本地内存中。
php的我不知道,不过我知道别的语言里,大多路由都需要手动注册,然后通过模版里的helper用路由名称来渲染路径,如django的urlfor