## URL访问 `ThinkPHP`采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从`URL`参数中解析当前请求的模块、控制器和操作,下面是一个标准的`URL`访问格式: ~~~ http://domainName/index.php/模块/控制器/操作 ~~~ 其中`index.php`就称之为应用的入口文件(注意入口文件可以被隐藏,后面会提到)。 >[success]#### 提示: > * * * * * > 模块在ThinkPHP中的概念其实就是应用目录下面的子目录,而官方的规范是目录名小写,因此模块全部采用小写命名,无论URL是否开启大小写转换,模块名都会强制小写。 应用的`index`模块的`Index`控制器定义如下: ~~~ <?php namespace app\index\controller; class Index { public function index() { return 'index'; } public function hello($name = 'World') { return 'Hello,' . $name . '!'; } } ~~~ 如果我们直接访问入口文件的话,由于URL中没有模块、控制器和操作,因此系统会访问默认模块(index)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的: ~~~ http://tp5.com/index.php http://tp5.com/index.php/index/index/index ~~~ 如果要访问控制器的hello方法,则需要使用完整的URL地址 ~~~ http://tp5.com/index.php/index/index/hello/name/thinkphp ~~~ 访问URL地址后页面输出结果为: ~~~ Hello,thinkphp! ~~~ 由于`name`参数为可选参数,因此也可以使用 ~~~ http://tp5.com/index.php/index/index/hello ~~~ 访问URL地址后页面输出结果为: ~~~ Hello,World! ~~~ 默认情况下,URL地址中的控制器和操作名是不区分大小写的,因此下面的访问其实是等效的: ~~~ http://tp5.com/index.php/index/Index/Index http://tp5.com/index.php/index/INDEX/INDEX ~~~ 如果你的控制器是驼峰的,例如定义一个HelloWorld控制器(`application/index/controller/HelloWorld.php`): ~~~ <?php namespace app\index\controller; class HelloWorld { public function index($name = 'World') { return 'Hello,' . $name . '!'; } } ~~~ 正确的URL访问地址(该地址可以使用url方法生成)应该是: ~~~ http://tp5.com/index.php/index/hello_world/index ~~~ 系统会自动定位到`HelloWorld`控制器类去操作。 如果使用 ~~~ http://tp5.com/index.php/index/HelloWorld/index ~~~ 将会报错,并提示`Helloworld`控制器类不存在。 如果希望严格区分大小写访问(这样就可以支持驼峰法进行控制器访问),可以在应用配置文件中设置: ~~~ // 关闭URL自动转换(支持驼峰访问控制器) 'url_convert' => false, ~~~ 关闭URL自动转换之后,必须使用下面的URL地址访问(控制器名称必须严格使用控制器类的名称,不包含控制器后缀): ~~~ http://tp5.com/index.php/index/Index/index http://tp5.com/index.php/index/HelloWorld/index ~~~ >[success]#### 提示: > * * * * * > 操作方法的访问本身不会受URL自动转换的影响,但会影响默认的模板渲染输出。 如果你的服务器环境不支持`pathinfo`方式的URL访问,可以使用兼容方式,例如: ~~~ http://tp5.com/index.php?s=/index/Index/index ~~~ 其中变量`s`的名称的可以配置的。 > 5.0不再支持普通的URL访问方式,所以下面的访问是无效的,你会发现无论输入什么,访问的都是默认的控制器和操作^_^ ~~~ http://tp5.com/index.php?m=index&c=Index&a=hello ~~~