PHP

ID #337

How can one PHP file transparently handle all search-engine friendly URLs?

Applies to: Grid System

The following is a way to have a search-engine friendly URL such as http://www.example.com/blog/2007/jan in the browser, be transformed server-side to http://www.example.com/blog/index.php?year=2007&month=jan without changing what is seen in the address bar of the browser.

This can be performed by using the mod_rewrite directive in your .htaccess file.

To perform this, your .htaccess file should have the following lines within it with one directive per line:


RewriteEngine On
RewriteRule ^blog/([0-9]+)/([a-z]+)$ /blog/index.php?year=$1&month=$2 [nc]



Explanation:
RewriteEngine On
The first line will ensure that your RewriteEngine is on.

RewriteRule ^blog/([0-9]+)/([a-z]+)$ /blog/index.php?year=$1&month=$2 [nc]
The second line is explained as follows:
^blog/ - ensures that it will look at the beginning of the string starting with blog

([0-9]+) - looks for a series of numbers from 0-9. The + at the end ensures that it will match repeating numbers one or more times i.e. the case of 2007.

([a-z]+)$ - looks for an input in lower-case letters. The + at the end ensures that it will match repeating letters one or more times i.e. the case of Tree. In this example the case will not matter because of what we have added at the end of the rule. The dollar sign at the end simply tells the directive to look for the end of the line.

/blog/index.php?year=$1&month=$2 - this is what the website will translate into where $1 is the first input received, in this case 2007 and $2 is the second input received, in this case jan.

[nc] - This stands for "no case" or "non-case sensitive." By having this at the end of the rule, it does not matter what case the input is in. For example, http://www.example.com/blog/2007/JaN will react the same as http://www.example.com/blog/2007/jan.

This can be easily expanded to include many different types of input in more general or specific terms using regular expressions (regex/regexp). More information on regex and how to use it can be found at:
http://www.regular-expressions.info/tutorial.html

Also, more complete information on the mod_rewrite directive can be found at:
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html


Last update: 2010-10-05 16:01
Author: FAQ Admin
Revision: 1.2

Digg it! Share on Facebook Print this record Send FAQ to a friend Show this as PDF file
Please rate this FAQ:

Average rating: 0 (0 Votes)

completely useless 1 2 3 4 5 most valuable

You can comment this FAQ

Comment of Anonymous:
If you want requests for any /*.php file to be transparently handled by your /index.php, here's one way to do it in your .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^([a-z]+).php$ /index.php [nc]
Added at: 2009-10-16 06:34