Apache CodeIgniter如何知道index.php不是目录?
My Code Igniter应用程序的URL如下所示: 我的问题是,解析url时,Apache如何知道没有名为index.php的文件夹?如果我是解析器,那就是我要寻找的:) 我知道它是有效的,CI的index.php也会被调用,但我不明白它是如何工作的。也许点不允许作为目录名的一部分Apache CodeIgniter如何知道index.php不是目录?,apache,mod-rewrite,codeigniter,Apache,Mod Rewrite,Codeigniter,My Code Igniter应用程序的URL如下所示: 我的问题是,解析url时,Apache如何知道没有名为index.php的文件夹?如果我是解析器,那就是我要寻找的:) 我知道它是有效的,CI的index.php也会被调用,但我不明白它是如何工作的。也许点不允许作为目录名的一部分 更新有关详细信息,请参阅对已接受问题的评论,我的问题有很多细节。CodeIgniter基本上通过搜索URL中的索引文件名“index.php”来重写URL。在CI的配置文件中查找此行: $config['in
更新有关详细信息,请参阅对已接受问题的评论,我的问题有很多细节。CodeIgniter基本上通过搜索URL中的索引文件名“index.php”来重写URL。在CI的配置文件中查找此行:
$config['index_page'] = "index.php";
试着把它换成别的东西,看看它是否还能用
编辑:好的,为了回答Juan提出的问题,Apache知道index.php不是目录的方式是因为文件和目录不能在同一目录中具有相同的名称。如果index.php只是一个目录,Apache将进入其中并进一步搜索。如果它是一个文件,它将运行该文件。如果我没有弄错的话,一个带有
的目录路径是无效的。同样,如果我没有弄错的话,HTTP请求会将
视为文件扩展名分隔符,并忽略所有数字字符之后的内容(即第一个/
之前的内容)。因此,它会进入索引。
,查找文件扩展名php
,看到/
,然后停止查找去哪里。如果你想完全删除index.php部分,你必须先在apache的重写中找到URL,然后再转到CI.Hmm…用dot.php试试,看看它是否有效(我怀疑它会……目前正在试图找到真正的答案)@Juan实际上………我想我知道它是什么。我认为你不能在同一个目录中有一个完全相同的文件和文件夹。因此,如果您有localhost/index.php/whatever.html
,它将在localhost中搜索名为index.php的文件或文件夹并打开/运行它。如果它是一个文件夹,它将打开它并进一步搜索。如果它是一个文件,它将运行它。@Juan,浏览器没有做任何测试。浏览器向服务器发送http请求,服务器获取URL并确定如何处理该URL。Apache正在检查目录节点是文件还是目录。@是真的吗?我在几个项目中使用了CI,但我从未注意到这种行为href=“hello.html”
和href=“/hello.html
,我想,这两种浏览器都会将您指向服务器/hello.html。我想浏览器至少会从服务器了解当前的基本路径,这样它就不会将hello.html
发送到/session/login/hello.html
。