Practical Ecommerce

Video Tutorial: Eliminating Dynamic URLs with Mod_Rewrite

View Tutorial Get started using Mod_Rewrite to clean up your website’s dynamic URLs with this video tutorial presented by Practical eCommerce’s online director Brian Getting. We’ll look at using simple Mod_Rewrite commands in an .htaccess file to get rid of those ugly dynamic URLs that look like this:


By the end of this tutorial, you’ll have a better understanding of what it takes to make an ugly, dynamic URL like the one above into a clean, search engine friendly URL like this:


We start by creating a simple PHP script that will gather variables from the URL string and output them, which will allow us to verify that our Mod_Rewrite changes are working properly. From there we move on to re-mapping URLs using Mod_Rewrite directives in our .htaccess file.

This tutorial is intended for website developers that are hosting websites on servers running Apache web server with Mod_Rewrite enabled, and access to their website’s .htacess file. Please contact your hosting company for more information about your account. A basic understanding of server-side scripting and website administration is assumed.

Software Used: Adobe Dreamweaver 8

Required Server Software: Apache Web Server w/ Mod_Rewrite enabled

Sample Files:

View Tutorial

This video tutorial requires Flash Player version 8 or above. Please forward us your ideas for additional video tutorials, via our Contact Us form.

Brian Getting

Brian Getting

Bio   •   RSS Feed


Sign up for our email newsletter

  1. Legacy User January 25, 2007 Reply


    — *Manisekaran*

  2. Legacy User February 6, 2007 Reply

    I was wondering, is that Dreamweaver you're using or some other HTML editor? Nice tutorial… I think people are scared of mod_rewrite but it's really not difficult and can make a huge difference in usability and search engine optimization.

    — *Brandon Eley*

  3. Legacy User February 6, 2007 Reply

    In this particular tutorial, I am using Dreamweaver as a text editor. You could use any plain text editor, but I like to use some sort of IDE that has code highlighting and auto-indent. Another good choice (if you are on a mac) is an application called TextMate, which is also a great code editing tool.

    — *Brian Getting*

  4. Legacy User February 9, 2007 Reply

    Hello, perfect tutorial, but I have one question, if I try to rewrite on it doesn't work. I tried anything, for example RewriteRule ^(.*)$ index.php?user=$1 [nc] but it returns index.php, but i need to return john. I tryed the direct url RewriteRule ^*)$ index.php?user=$1 [nc] but it still doesnt work. The address with working, because I put this (.*) / to rewrite script. Please somebody to help me with the line code.

    — *Filip Pavlis*

  5. Legacy User March 7, 2007 Reply


    You need to put it out at least one directory, otherwise it runs through a loop where any address at your site (since they all pass the RewriteRule test) generates a call back to the index page, passing everything after your domain name along as a variable. That's why you get the output that you are getting.

    Try doing something like this, which should work:

    <font face="courier">RewriteRule ^users/(.*) index.php?user=$1</font>

    — *Brian Getting*

  6. Legacy User June 4, 2007 Reply

    I've been wondering about how to do this for years, but never tried. Didn't realize how easy it could be. Great benefit to my site, thanks.

    – Josh

    — *Josh*

  7. Legacy User June 4, 2007 Reply

    this did present one problem for me. I use local values for displaying links and images in my html code. Having my urls as such:

    is telling the site to look for images in view/1234/images instead of /images.

    Is there a simple solution for this that wont require changed the src to each image and link on my site?

    — *josh*

  8. Legacy User August 24, 2007 Reply

    John- If your URL is something along the lines of:


    You will want to have the value of "john_smith" passed as a variable ($1) to the script that is accessing that information. The script should then go through and automatically replace the "_" with a space (" ") using something like .gsub (for Ruby). Then the database is queried for the user's name. In most cases, as I imagine it, you will have a first name and last name column in the database, so you would actually want to split the name at the underscore, and query the database for the user with that first and last name combination.

    Hope this helps some.

    — *Brian Getting*

  9. Legacy User August 24, 2007 Reply

    How do you include chars like _ – etc. ?
    I want someone mentioned in the thread before I want to create
    however the only way i can use (.*) is if i have a directory /users/ …. but then people have to type /users/john to access johns profile… i want them to just have to write mysite/john
    it works without the users directory if i use (a-z) etc… but then if the users name has an underscore or any other chars it won work…
    how is this done so that you can also include _ – in the users name. thanks J

    — *john*

  10. Legacy User August 24, 2007 Reply

    Josh- You could try the BASE HREF meta tag in your pages, but I would recommend going with images links such as "/images/your_image.jpg" rather than "images/your_images.jpg".

    This has many advantages, and is probably the best way to do things.

    — *Brian Getting*

  11. Legacy User September 5, 2007 Reply

    We have this code working fine on a solaris server, but when we moved our site to a Linux server the redirecting doesn't work. Any ideas? Thanks

    — *Julia*

  12. Legacy User October 3, 2007 Reply

    Brian's solution won't work as he suggested to change images src to 'images/mymage' to /images/myimage' .

    For example, if my site is http://localhost/mysite and I change image src to "/images/myimage", then image src would be http://localhost/myimage instead of http://localhost/images/myimage. This also applies to style sheet,javascript.

    Is there any other solution through .htacces?

    — *netmastan*

  13. Legacy User October 9, 2007 Reply

    Oh man…nice tutorial… and all that works, but how can i make to actually work with a real website?

    do i have to replace index.php
    for something else?

    what i mean i'm only getting the:

    out variables


    The following variables were passed in the URL string:

    Variable 1: $1
    Variable 2: $2
    Variable 3: $3
    Variable 4: $3

    Your mod-rewrite script seems to be working fine.


    what is the step to make work

    i tried all this rules in my .htaccess

    #RewriteRule ^ppc/(.*)/ index.php?var1=$1&var2=$2&var3=$3

    #RewriteRule ^ppc/(.*)/ index.php?ppc=$1

    RewriteRule ^abc/([^/.]+)/?$ index.php?var1=$1&var2=$2&var3=$3 [L]


    it suppose to go to and so on

    why is not working?

    please some one help.

    can some one help


    — *juan*

  14. Legacy User November 3, 2007 Reply

    Wow, nice tutorial.

    Thank you so much for this. It really helps, specially for SEO and nice pretty URLs. Thanks!

    — *Gab*