如何修改thinkPHP路由规则,使U方法自动生成伪静态链接

简介: 效果假设网站域名是A.com,那么可以:通过A.com/xwzx.html访问A.com/Home/News/index.html?id=xwzx或者通过A.

效果

假设网站域名是A.com,那么可以:
通过
A.com/xwzx.html
访问
A.com/Home/News/index.html?id=xwzx
或者通过
A.com/xwzx_1.html
访问
A.com/Home/News/index.html?id=xwzx&p=1

最关键的是:

使用
U('Home/News/index', array('id'=>xwzx))
生成
A.com/xwzx.html链接
或者使用
U('Home/News/index', array('id'=>xwzx,'p'=>1))
生成
A.com/xwzx_1.html链接
以此类推

目的

其实ThinkPHP3.2.3的路由部分使用场景并不多,究其原因是因为路由规则可以设置并正常访问,但是却没有自动生成路由的方法。比如说你配置完一个路由规则A.com/xwzx.html是可以正常访问的,却发现有大量的链接U('Home/News/index', array('id'=>xwzx))需要修改为/xwzx.html,使用的U方法并不能自动完成转化。
所以我们的目的就是,让U方法可以根据路由规则反推出伪静态的链接。这样做有什么好处呢?

  1. 如果有老项目需要配置全站的伪静态规则,这样做可以减少工作量,一切只需要配置即可。
  2. 在需要发起支付的页面,通常会带多个参数,这样就不利于我们配置支付接口的发起地址,此时用这个方法可以把多个参数合并到同一段URL中。更多支付接口配置内容请参考PHP支付接口教程,详解微信支付(一)
  3. 不需要做项目之前就事先处理伪静态页面,只需要正常写U方法即可,加快开发速度。

思路

修改ThinkPHP底层的U方法,当路由规则开启时,通过规则反推出伪静态链接。

配置规则同ThinkPHP官方的文档,Application/Common/Conf/config.php配置如下:

'URL_ROUTER_ON' => true, // 开启URL路由
'URL_ROUTE_RULES' => array(
//'CGIIP/:id/:p'=>'Home/News/index',
'/^([A-Za-z0-9]+)$/'=>'Home/News/index?id=:1',
'/^([A-Za-z0-9]+)_(d+)$/'=>'Home/News/index?id=:1&p=:2',
'4O4'=>'Admin/Index/notFound',
'test'=>'Home/Index/test',
), // 路由规则

修改ThinkPHP/Common/functions.php里面的U方法:

<script src="https://gist.coding.net/u/fourn/60d20945c81645b3b826330896c0fa93.js"></script>

完整functions.php文件代码在Coding中:

代码放到U方法中,“if($suffix){”这行代码之前。
注意这些都是针对ThinkPHP3.2.3版本的哦

目录
相关文章
|
4月前
|
前端开发 JavaScript Linux
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
|
5月前
|
JavaScript
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
5月前
|
JavaScript
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保 路径正确,然后再试一次。
vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保 路径正确,然后再试一次。
|
5月前
|
存储 安全 C#
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
技术心得记录:强命名的延迟与关联在.net程序集保护中的作用及其逆向方法
|
数据安全/隐私保护
fastadmin中写接口是时Validate规则验证自定义如何用
fastadmin中写接口是时Validate规则验证自定义如何用
219 0
|
6月前
thinkphp5.1全局异常类封装
thinkphp5.1全局异常类封装
53 0
thinkphp5.1全局异常类封装
|
11月前
|
前端开发 小程序 PHP
laravel5.8(四)引入自定义常量文件及公共函数文件
开发过程中,我们一般会用到一些不会改变,或者改变不是很频繁的值,这样的值我们一般将他们定义成常量。 比如网站根目录,或者分页数,或者域名等等。 那我们如何在laravel5.8中引入自定义的常量文件及公共的函数文件呢。 大概有两种方式: 1:框架目录下引入(不推荐) 在框架目录vendor下新建常量文件const.php,以及公共函数文件function.php 在autoload.php文件中引入。 这种方法是可以的,但是不推荐,框架目录下最好都是框架自己的那些文件,正常来说,框架的文件我们在开发过程中,git是不会进行托管的。 2:在app目录下引入 在bootstrap目录下新建常量文件
68 0
|
API PHP
php函数API接口的一段代码,不为什么就是想放在这里
php函数API接口的一段代码,不为什么就是想放在这里
46 0
|
文件存储
Yii2.0框架提供了内置的文件访问组件,可以通过配置只允许访问指定的目录,防止非法文件的包含。这个如何使用?
Yii2.0框架提供了内置的文件访问组件,可以通过配置只允许访问指定的目录,防止非法文件的包含。这个如何使用?
145 0