Make search engine friendly urls using php instead of using mod_rewrite.
Tutorial Introduction
The previous tutorials in the Apaches mod_rewrite series covered how to enable mod_rewrite on apache and how to use mod_rewrite for search engine friendly urls. This tutorial will not cover how to get search engine friendly urls with using mod_rewrite, but how to do the same using php and apache filesmatch instead of mod_rewrite.
Say for instance you are making a web hosting site want the url http://www.mod_rewrite.dom/something.php?page=12&category=hosting to pass variables back to a php script.
The most obvious thing to do is this.
$pagenumber= $post["page"] $category=$post["category"]
Whereby you use $post to find out the value of the page, which in this case is 12 and the category which in this case happens to be hosting. There are two things wrong with using urls like this a.they are not user friendly and b.they are not search engine friendly.
You probably want a nice easy to use url that looks more like this.
http://www.mod_rewrite.dom/something.php/page/12/category/hostingThe big problem here is getting the variable values back to the php script displaying the page. The solution is to use a php script that looks more like this
$data = explode("/",$HTTP_SERVER_VARS['PATH_INFO']);
$page = $data[1];
$category = $data[3];
Explanation
the $HTTP_SERVER_VARS['PATH_INFO'] returns the path of the url from where something.php is being accessed so in this case it will return page/12/category/hosting. This then gets exploded or broken down into the array $data
- $data[0] = page
- $data[1] = 12
- $data[2] = category
- $data[3] = hosting
This way you have access to all the data you need for your php script.
One Small Problem
If you look closely you will spot something strange with the resultant url
http://www.mod_rewrite.dom/something.php/page/12/category/hostingThe .php extension right in the middle of the url is a problem, some search engines may recognize this as improper format and wont index your site. And if you leave it out the server wont recognize that it is a php file, that is ofcourse unless you tell the server to treat the file as a .php file even if its missing the extension. So you want the url to look like this
http://www.mod_rewrite.dom/something/page/12/category/hostingTo do this you need to create a .htaccess file (blank text file named .htaccess). And insert the following code
<FilesMatch "^something$"> < ForceType application/x-httpd-php > </FilesMatch>
First the files match checks for the word 'something' in the url, then the force type directive tells Apache to recognize 'something' as a php file even though there is no extension in the url.
Comparison with mod_rewrite
Flexibility
Mod_rewrite is much more flexible than the php method, but whats fexible to some is complicated to others
SEO
I think that both are pretty much equal. The only problem with the php method is the urls sometimes become very long. Still this is more of a user friendliesness problem than a SEO problem
Sever Resources
This is where the php method really shines, specially for larger sites. Because doing mod_rewrite on sites with a lot of pages takes up a large amount of resources. This is also the reason why tutorio.com uses the php method for our urls.