使index.php表现为目录

时间:2009-05-20 12:51:16

标签: php sysadmin

某些网站(例如,mediawiki的某些实现)的uri格式为http://example.com/index.php/SOME_PAGE。这是怎么做到的? index.php只是服务器上的一个目录,恰好命名为php文件,实际上包含一个名为SOME_PAGE的文件?如果是这样,为什么这么说呢?如果没有(即它实际上 代表某种合法的PHP文件),那么外观会是什么样的呢?

5 个答案:

答案 0 :(得分:12)

此功能称为路径信息(请参阅Apache directive AcceptPathInfo)。

启用后,Apache会写入已经映射到PATH_INFO环境变量中现有文件或目录的其余请求URI路径。因此,如果请求/index.php/SOME_PAGE并且/index.php是现有文件,则请求将映射到该文件,然后/index.php/SOME_PAGE)之后的其余路径可用PATH_INFO变量。

答案 1 :(得分:1)

通常,它也使用.htaccess文件和mod_rewrite完成。

有关详细信息,请参阅this article

答案 2 :(得分:1)

它的行为不像目录,它看起来就像是。

index.php是一个常规的php文件。

Here's a tutorial关于如何仅使用PHP代码执行此操作。这个问题是你只获得了价值,并且你的代码中有无意义的密钥。

教程中的示例是,他正在调用index.php / about / Evan / 2

要从网址获取about,他会提取

$url[0]

这不是很有意义吗?

答案 3 :(得分:0)

查看Apache中使用的“AcceptPathInfo”指令(直接在httpd.conf中或通过.htaccess)。自从我使用PHP / Apache以来已经很长时间了,甚至更长时间以来我做了这种url美化,但它本质上是一种将额外的数据传递到index.php而没有“var1 =”的“普通”html语法的方法FOO&安培; VAR2 =酒吧

注意,当我这样做时,我设置了一个名为'dynamic'(或类似)的脚本作为默认的PHP解析处理程序,并使我的URL看起来像http://hostname/dynamic/value1/value2

HTH

答案 4 :(得分:0)

这些网站使用web服务器模块(例如apache的mod_rewrite)重写传入请求以指向服务器上的实际资源。