You will need a few things:
Setup an .htaccess to redirect all request to your main file which will handle all that, something like:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
The above will redirect all request of non-existent files and folder to your index.php
Now you want to handle the URL Path so you can use the PHP variable $_SERVER['REQUEST_URI']
as you have mentioned.
From there is pretty much parse the result of it to extract the information you want, you could use one of the functions parse_url
or pathinfo
or explode
, to do so.
Using parse_url
which is probably the most indicated way of doing this:
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "https" : "http";
$url = $s . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
var_dump(parse_url($url));
Output:
["scheme"] => string(4) "http"
["host"] => string(10) "domain.com"
["path"] => string(36) "/health/2013/08/25/some-random-title"
["query"] => string(17) "with=query-string"
So parse_url
can easily break down the current URL as you can see.
For example using pathinfo
:
$path_parts = pathinfo($_SERVER['REQUEST_URI']);
$path_parts['dirname']
would return /health/2013/08/25/
$path_parts['basename']
would return some-random-title
and if it had an extension it would return some-random-title.html
$path_parts['extension']
would return empty and if it had an extension it would return .html
$path_parts['filename']
would return some-random-title
and if it had an extension it would return some-random-title.html
Using explode something like this:
$parts = explode('/', $path);
foreach ($parts as $part)
echo $part, "
";
Output:
health
2013
08
25
some-random-title.php
Of course these are just examples of how you could read it.
You could also use .htaccess to make specific rules instead of handling everything from one file, for example:
RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/?$ blog.php?category=$1&date=$2-$3-$4&title=$5 [L]
Basically the above would break down the URL path and internally redirect it to your file blog.php with the proper parameters, so using your URL sample it would redirect to:
http://www.mysite.com/blog.php?category=health&date=2013-08-25&title=some-random-title
However on the client browser the URL would remain the same:
http://www.mysite.com/health/2013/08/25/some-random-title
There are also other functions that might come handy into this for example parse_url
, pathinfo
like I have mentioned early, server variables, etc...