thinkphp5 模块名和静态资源文件夹重名问题

thinkphp5初学者,自己尝试做了一个小项目,环境为 IIS7 + msyql + php ,其中发现一些问题,请大神解答一下:

首先,按照thinphp5规范,站点根目录部署在public文件夹,在application中创建index模块,其中的index 控制器中有个 download方法:

class Index
{ ……………

public function download(){
    do something;
}

download内容比较简单,就是读取数据中下载内容名称和链接,然后用模板输出一个下载列表。
然后我使用urlrewrite隐藏掉index.php/index/index/ 访问路径为 http://zzz.com/download/ (zzz.com为本地站点)
图片描述

这样访问本来是没有问题的
图片描述

但是,出于习惯,我把下载文件目录设置为了download。然后在网站根目录下(public文件夹)建了download文件夹,然后把下载文件放进去。
当我再次访问 http://zzz.com/downlaod/ 时候,IIS报错:
图片描述

而里面的文件 http://zzz.com/downlaod/1.pdf 可以正常访问。

我想了想这个是可以理解的,此时访问 http://zzz.com/downlaod/ 的时候会访问download文件夹,而download文件夹中没有默认文档(index.php index.html等)。所以IIS会报错。

但是我不大明白的是,thinphp5对url处理的顺序是什么样的呢?
是不是说 如果有符合url的静态路径的时候,优先访问静态文件?
如果没有的话,再由thinkphp5去处理url然后访问对应的模块/控制器/方法…… ?

另外,url重写发生在哪一步呢?从上面的情况来看,应该是:
IIS根据url直接寻找对应路径,找到了就直接读取,找不到则访问thinphp5入口文件,入口文件调用url重写得到符合自己规则的实际访问路径,然后执行……
(更新: 此处应该是IIS先直接寻找url路径,找不到则根据url重写规则寻找重写后的路径,因为重写路径中包含index.php,所以才访问到thinphp5的应用。此处算是想明白了。)
但总感觉哪里不对。

有没有办法可以让 http://zzz.com/downlaod/ 能正常访问呢?

另外,thinkphp5 没有参数的方法,在访问路径中加上参数,为什么不报错呢?
即: http://zzz.com/downlaod/一个... 会直接访问 http://zzz.com/downlaod/ 而不报错。

求大神指点迷津……

阅读 3k
1 个回答

这和thinphp5没有任何关系,web服务器先找目录,找到了就显示目录内容,没找到就找根目录的index.php,
访问到index.php才进入thinphp5的路由

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题