Some sites (for example, certain implementations of mediawiki,) have a uri format of http://example.com/index.php/SOME_PAGE
. How is this done? Is index.php just a directory on the server that happens to be named like a php file and that actually contains a file named SOME_PAGE
? If so, why name it like that? If not (i.e. it actually does represent some sort of legitimate PHP file), then what would the contents of the look like?
views:
260answers:
5This feature is called path info (see Apache directive AcceptPathInfo
).
When enabled, Apache writes the rest of the requested URI path that’s already mapped to an existing file or directory in the PATH_INFO
environment variable. So if /index.php/SOME_PAGE
is requested and /index.php
is an existing file, the request is mapped to that file and the rest of the path after /index.php
(/SOME_PAGE
) is then available in the PATH_INFO
variable.
It is not behaving like a directory, it just looks like it is.
index.php is a regular php file.
Here's a tutorial on how to do this with only PHP code. The issue with this is that you are only getting values and you have meaningless key's in your code.
Example from the tutorial, is he is calling index.php/about/Evan/2
To get about
from the url, he fetches
$url[0]
That's not very meaningful is it?
Look at the "AcceptPathInfo" directive used in Apache (directly in httpd.conf or via .htaccess). It is a long time since I have used PHP / Apache, and even longer since I did this kind of url prettification, but it is essentially a way of passing extra data into index.php without the "normal" html syntax of ?var1=foo&var2=bar
Note, when I did it, I set up a script called 'dynamic' (or similar) as being the default, PHP parsed handler, and made my URLs look like http://hostname/dynamic/value1/value2
HTH
Those sites rewrite incoming requests to point to the actual resources on the server using web server modules such as apache's mod_rewrite.
Often, it is also done using a .htaccess file and mod_rewrite.
See this article for more info.