The mod_rewrite and the magic of rewriting the URL
04/06/2011
The major benefit in rewriting the url is a better indexation from the search engines. It seems in fact that the spider are disturbed by the query string (?id=34&type=5&mod=user), particularly if they pass many parameters.
Are you ready to enter in this mysterious and interesting field of the web?
How can we translate the url ?
Let’s consider that in our site, the page products.php shows a product in base of the id passed through the url. .
This page shows the details of the product saved in the database with id=79.
with a simple rule, we can rewrite the url in this way:
All we have to do is say to Apache:
when you find in the url product followed by a dash followed by a number followed by .html, ask for the product page.php?id=thatNumber
As you have hinted, we need to work with the regular expressions. If you are new at this, don’t worry. Giustino wrote an excellent guide concerning this matter.
How to declare a rule?
The general model to declare a rewrite rule is the following:
RewriteEngine On RewriteRule what-i-think-to-find-in-url-bar how-i-have-to-translate-what-i-find |
First of all, the motor of the mod rewrite gets initialized with the statement RewriteEngine On.
Afterwards, the rule (or the rules) get declared.
But let’s pass to the practice and implement what said in the previous paragraph.
We begin with writing the page products.php that we will simply create like this:
<?php echo 'This page display the product number ' . $_GET [ 'id' ]; ?> |
This will be enough to verify the correct functioning of our rule.
Now let’s see the file .htaccess that has to be saved in the same (or superior level) folder of the file products.php.
RewriteEngine On RewriteRule ^product-([0-9]+)\.html$ products.php?id= $1 |
All that this rule says is exactly want we have seen previously: When you find in the url something that begins with (^ means beginning of the string) product followed by a dashfollowed by one or more digit number (+ means one or more) and ends ($ means the end of the string) with .html, ask for the page products.php?id=thatNumber
$1 refers to what has been found from the first (in this case only one) substring.
Now setting as url:
You should visualize on the video the phrase:
“This page shows the product number 34.”
An example with two parameters
Now if we suppose that our page products.php depends on two parameters: the id and the category of the product. The original URL could be this:
While rewritten may have this aspect:
So, let’s see a possible rule and then comment it:
RewriteEngine On RewriteRule ^([a-z]+)/product-([0-9]+)\.html$ products.php?category= $1 &id= $2 |
What does this rule say?
If you find a string that begins with one or more characters followed by / followed by productfollowed by a dash followed by one or more digit number followed by .html, ask for the page products.php?category=theOneThatYouFoundInTheFirstSubstring=theOnethatYouFoundInTheSecondSubstring
We modify the file products.php so that we can verify also the functioning of this second example in this way:
<?php echo 'This page display the product number ' . $_GET [ 'id' ] . ' of the category ' . $_GET [ 'category' ]; ?> |
Now typing the url:
You’ll visualize on the video the following phrase:
“This page shows the product number 12 belonging to the beverage category.”
Conclusions
In this article we’ve seen the bases of the url rewrite. You realized how important it is a good knowledge of the regular expressions in order to master this technique. In the next article, we’ll see a very practical application in the SEO field, that is a rewrite similar to the one that implements wordpress with the permalink .
And you, do you have some url rewrite samples to show?