Return to Cauldron Home Page

Please donate now to pay our monthly server fees:
Donate to The Cauldron
[More Info]

Community Menu
Community Home

Message Board
Board Home
Board Rules
Board Extras:

CauldronMUX [Client]
Sister Forums:
   Asatru Lore


Site Info & Rules
Site Archives
Volunteers Needed
Advertise Here

Pagan Supplies
Buy Pagan Books
Buy Pagan Supplies

Books & Media
Books Home
Games Home
Music: Free | Pagan
Online Books
Pagan Book Browser
   Academic Books
   Divination Decks
   Fiction Books
   Pagan Books
   Speculative Books
   DVD & Videotape
Submit Review

Pagan Features
Article Library
Chat Log Index
File Library
Pagan Holidays
Pagan Primer
Pagan Rituals
Pagan Supplies
Pagan Youth
Spell Grimoire [Blog]
Web Resources

Pagan Living
Cauldron Cookbook
Take Political Action

Back Issues

Other Features
Greeting Cards
Syndicated Articles
World News/Opinion

Cheap Web Hosting
Doxy's Bazaar
Witchcraft Course

Old Indexes
Article Index
Webcrafting Index

Network Sites
Cauldron and Candle
Cauldron's Grimoire
RetroRoleplaying: The Blog
Software Gadgets
The Terran Empire

Site Search
Entire Web
The Cauldron

Member - Pagan Forum Alliance
Charter Member

Get Firefox! While this web site is designed to work in all major browsers, we recommend Firefox.

This site hosted on
a Linode VPS
Formerly hosted by

Why Use Dreamhost?

Site copyright
© 1998-2009
by Randall

Home > Article Library > Webcrafting > MOD_REWRITE for Dummies Search

MOD_REWRITE for Dummies
by Bobby Handzhiev

This article is not a complete guide to Apache's mod_rewrite neither to .htaccess. Its purpose is to help you - the webmaster - to create "mod_rewriten" versions of your dynamic webpages even if you have limited technical knowledge. I won't show you all the tips-and-tricks - my aim is to bring all the complexity of the Apache's documentation to 1-2 pages of human language - easy and fast.

What is mod_rewrite?

Mod_rewrite is Apache extension which allows you to "rewrite" the URLs of your web pages. If your server supports this technology (most Linux webhosts do nowadays) you are able to rewrite virtually any URL into anything you like. Most often it is used to rewrite the URLs of dynamically generated webpages such as

This can easy be 'translated' into

Why mod_rewrite?

  • Search engine optimization - there are a lot of debates on this topic, but it is still true that the static-looking links rank better than the dynamic ones. Here is a confirmation from Google on that topic:
    "Your pages are dynamically generated. We're able to index dynamically generated pages. However, because our web crawler could overwhelm and crash sites that serve dynamic content, we limit the number of dynamic pages we index. In addition, our crawlers may suspect that a URL with many dynamic parameters might be the same page as another URL with different parameters. For that reason, we recommend using fewer parameters if possible. Typically, URLs with 1-2 parameters are more easily crawlable than those with many parameters."
  • User-friendliness - Some users remember the URLs visally. Even if they bookmark, they can easier recognize a link like than for example.

  • Security - mod_rewrite helps you hide the parameters passed in the application. Basically your dynamic pages should be secure enough even without mod_rewrite. But hiding the parameters will decrease the danger of attack

How to use it?

Mod_rewrite is really powerful if you are familiar with the regular expressions which it uses.
But learning the whole pattern syntax can be quite complicated, especially for the non-technical user. Thats why i'll teach you at several simple patterns which are pretty enough to get your website URLs rewritten.

Lets start:

First you need to create a file called .htaccess and place it exactly in the folder where you want the rewriting to take effect (it will also take effect over all subfolders). In case you already have a .htaccess file you can simply add the lines to it (if it already has mode_rewrite directives you can mess them up, however). Open it in a simple text editor and start with:

Options +FollowSymLinks
RewriteEngine on

Now the rewrite engine is switched on. You can now start adding as many rewrite rules as you want. The format is simple:

RewriteRule rewrite_from rewrite_to

Here "RewriteRule" is static text, i.e. you should not change. "rewrite_from" is the address which will be typed in the browser and "rewrite_to" - which page the server will actually activate. Both of these can contain "masks", but in "rewrite_to" we will only use $ and will discuss more or "rewrite_from" part. Let me "meet you" with the very few masks you'll need and bring you some samples. You'll see how easy is it.

Let's stop talking theory and see an example. Let's imagine your server runs an e-shop, which
uses URLs like index.php?task=categories to list the categories, index.php?task=category&id=5 to show a category contents and other parameters in 'task' to do other things.

RewriteRule ^(.*).html index.php?task=$1

What does all that mean? This is a rewrite rule which allows you to make your URLs looking as "static". In this example categories.html will be "translated" to index.php?task=categories.
So you no longer need dynamic URL to list the categories, but can write categories.html

But what do all these strange characters mean?
- ^ character marks the beginning. I.e. you tell the server that it should not expect anything before it.
- (.*) - This combination is the most often used and it means literally "everything". So everything you type before ".html" (i.e. your fake file name) will be passed as:
- $1 - This is a parameter, saying where the first mask should be put. If you have more than one masks (masks are everything which you use to represent dynamic text or file names) you can use $2, $3 etc. You'll see more in the following examples.

So, if you have categories.html it will be translated info index.php?task=categories, services.html into index.php?task=services etc...

What if you have more than one parameter? First, you should use some characters as delimiter:

RewriteRule ^(.*)-(.*).html index.php?task=$1&language=$2

Here how you can also pass task and language. For example, categories-englist.html will be translated into index.php?task=categories&language=english.

IMPORTANT: If you first write

RewriteRule ^(.*).html index.php?task=$1

The second one may not work. You need to always start from the most complicated rule to the simplest one.

Make It Better

The rule (.*) is too general and often may prevent you of making more complicated rewriting rules. So it is recommended that you "limit" the rules into something more concrete. Here are a couple of advices:

- Use the "OR" operator. In our e-shop example we have only few possible "tasks" passed to index.php. Lets say:

What will happen if you want to use your static file about.html? It will be rewritten into index.php?task=about and won't work. So you can use the OR operator and limit the rewriting only to the cases you need:

RewriteRule ^(categories|category|product|services).html index.php?task=$1

This tells the server to rewrite only if the file name is categories.html OR category.html OR product.html OR services.html

Using "numbers": You can easy limit the rewriter to rewrite if it meets only numbers at a certain place:

RewriteRule ^category-([0-9]*).html index.php?task=category&id=$1

With ([0-9]*) mask you tell the rewrite engine that on the mask place it should expect onlly numbers. So if it see category-english.html it won't rewrite to index.php?task=category&id=english, but to index.php?task=category&language=english (because of the rule we have shown above - RewriteRule ^(.*)-(.*).html index.php?task=$1&language=$2.).

Complete example: Here is how will look the final .htaccess file for our imaginary e-shop:


Options +FollowSymLinks
RewriteEngine on

RewriteRule ^(.*)-(.*).html index.php?task=$1&language=$2.
RewriteRule ^(categories|category|product|services).html index.php?task=$1
RewriteRule ^category-([0-9]*).html index.php?task=category&id=$1

About The Author

The author is Senior Deveoper in PIM Team Bulgaria and Consultant in SEO PIM Team

Pagan-Friendly Webhosting

Dreamhost offers high-quality, low cost web hosting with a dedication to free speech.

Dreamhost Features

· unlimited web space
· 50 gigs personal file space
· unlimited bandwidth
· unlimited email boxes (POP3/IMAP)
· unlimited ftp/shell accounts
· unlimited domains/subdomains
· php5, cgi, python, fastcgi, ssi
· zend optimizer, ruby on rails
· unlimited MySQL 5 databases
· announcement lists
· discussion (aka mailing) lists
· Jabber server, Custom DNS
· Crontab and Shell access
· Web-based Control Panel
· One-Click installs of the Wordpress blog & others
· 1 free domain name
· helpful tech support
· 100% Uptime Guarantee
· and much more!

All for $10.95 a month with a $49.95 setup fee (pay for a year in advance for $9.95 a month and there is no setup fee). Pay two years in advance and the price drops to $8.95 a month. (And there is a 97 day money back guarantee!)

Click here to read why we've hosted with Dreamhost.

Pagan Webcrafting
Do you have questions about web design or web hosting? Would you like to talk with fellow Pagans about web design? The Cauldron: A Pagan Forum's message board has a special folder set aside for discussions about
Computers and the Internet
(Click to Join Us. It's Free.)

Top | Home | Message Board | Site Info & Rules | Report Site Problems
Thanks to Cauldron Sponsors
(Sponsor The Cauldron!)

Cheap Web Hosting Report | Pagan & Magick Supplies
Witchcraft Course
Download Hundreds of Magic Spells