某些网站(例如,mediawiki的某些实现)的uri格式为http://example.com/index.php/SOME_PAGE
。这是怎么做到的? index.php只是服务器上的一个目录,恰好命名为php文件,实际上包含一个名为SOME_PAGE
的文件?如果是这样,为什么这么说呢?如果没有(即它实际上 代表某种合法的PHP文件),那么外观会是什么样的呢?
答案 0 :(得分:12)
此功能称为路径信息(请参阅Apache directive AcceptPathInfo
)。
启用后,Apache会写入已经映射到PATH_INFO
环境变量中现有文件或目录的其余请求URI路径。因此,如果请求/index.php/SOME_PAGE
并且/index.php
是现有文件,则请求将映射到该文件,然后/index.php
(/SOME_PAGE
)之后的其余路径可用PATH_INFO
变量。
答案 1 :(得分:1)
它的行为不像目录,它看起来就像是。
index.php是一个常规的php文件。
Here's a tutorial关于如何仅使用PHP代码执行此操作。这个问题是你只获得了价值,并且你的代码中有无意义的密钥。
教程中的示例是,他正在调用index.php / about / Evan / 2
要从网址获取about
,他会提取
$url[0]
这不是很有意义吗?
答案 2 :(得分:1)
通常,它也使用.htaccess文件和mod_rewrite完成。
有关详细信息,请参阅this article。
答案 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)重写传入请求以指向服务器上的实际资源。