企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## URL设计 ThinkPHP5.0在没有启用路由的情况下典型的URL访问规则是: >[info] #### http://serverName/应用(或应用入口文件)/模块/控制器/操作/[参数名/参数值...] 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是: >[info] #### >php.exe index.php(应用入口文件) 模块/控制器/操作/[参数名/参数值...] 可以看到,无论是URL访问还是命令行访问,都采用PATHINFO模式的访问地址,其中PATHINFO的分隔符是可以设置的。 注意:5.0取消了URL模式的概念,**普通模式的URL访问不再支持**,如果不支持PATHINFO的服务器可以使用兼容模式访问如下: >[info] #### http://serverName/应用入口文件?s=/模块/控制器/操作/[参数名/参数值...] 首先,解释下其中的几个概念: ||| |---|---| | **应用** | 基于同一个入口文件访问的项目我们称之为一个应用。(但应用可能具有多个入口) | | **模块** | 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录(小写)。 | | **控制器** | 每个模块可以包含多个控制器,一个控制器通常体现为一个(控制器)类(驼峰法命名)。 | | **操作** | 每个控制器类可以包含多个操作方法,每个操作是URL访问的最小单元。 | ## 简化URL访问 在ThinkPHP5.0中,出于优化的URL访问原则,我们还做出了如下的URL访问设计,这些设计包括: **隐藏应用入口文件** 应用入口文件通常就是指index.php,可以通过URL重写隐藏。 隐藏应用入口文件index.php,以Apache为例说明如何设置。 下面是Apache的配置过程,可以参考下: 1、httpd.conf配置文件中加载了mod_rewrite.so模块 2、AllowOverride None 将None改为 All 3、把下面的内容保存为`.htaccess`文件放到应用入口文件的同级目录下 ~~~ <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> ~~~ **隐藏模块** 由于默认是采用多模块的支持,所以多个模块的情况下必须在URL地址中标识当前模块,如果只有一个模块的话,可以进行模块绑定,方法是应用的公共文件中添加如下代码: ~~~ // 绑定index模块 \think\Route::bind('module','index'); ~~~ 设置后,我们的URL访问地址则变成: >[info] #### http://serverName/应用入口/控制器/操作/[参数名/参数值...] // 访问的模块是index模块 **隐藏控制器** 如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下: ~~~ // 绑定index模块的index控制器 \think\Route::bind('module','index/index'); ~~~ 设置后,我们的URL访问地址则变成: >[info] #### http://serverName/应用入口/操作/[参数名/参数值...] // 访问的模块是index模块,控制器是Index控制器 ## 单一模块 如果你的应用比较简单,只有一个模块,那么可以尝试使用单一模块结构,方法如下: 首先在入口文件中设置 ~~~ // 关闭多模块设计 define('APP_MULTI_MODULE',false); ~~~ 应用的目录结构就变成: ~~~ ├─application 应用目录(可设置) │ ├─runtime 应用的运行时目录(可写,可设置) │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目录 │ ├─ ... 更多类库目录 │ ├─common.php 函数文件 │ ├─route.php 路由配置文件 │ ├─database.php 数据库配置文件 │ └─config.php 配置文件 ~~~ URL访问地址变成 >[info] #### http://serverName/应用入口/控制器/操作/[参数名/参数值...] 单一模块设计的应用类库的命名空间有所调整,例如: ~~~ app\controller\Index app\model\User ~~~ 更多的URL简化和定制还可以通过URL路由功能实现。