5 useful url rewriting examples using .htaccess

If you are looking for the examples of URL rewriting then this post might be useful for you. In this post, I’ve given five useful examples of URL rewriting using .htacess. If you don’t know something about url rewriting then please check my older post about url rewriting using .htaccess.

Now let’s look at the examples

1)Rewriting product.php?id=12 to product-12.html

It is a simple redirection in which .php extension is hidden from the browser’s address bar and dynamic url (containing “?” character) is converted into a static URL.

RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

2) Rewriting product.php?id=12 to product/ipod-nano/12.html

SEO expert always suggest to display the main keyword in the URL. In the following URL rewriting technique you can display the name of the product in URL.

RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

3) Redirecting non www URL to www URL

If you type yahoo.com in browser it will be redirected to www.yahoo.com. If you want to do same with your website then put the following code to .htaccess file. What is benefit of this kind of redirection?? Please check the post about SEO friendly redirect (301) redirect in php and .htaccess.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^optimaxwebsolutions\.com$
RewriteRule (.*) http://www.optimaxwebsolutions.com/$1 [R=301,L]

4) Rewriting yoursite.com/user.php?username=xyz to yoursite.com/xyz

Have you checked zorpia.com.If you type http://zorpia.com/roshanbh233 in browser you can see my profile over there. If you want to do the same kind of redirection i.e http://yoursite.com/xyz to http://yoursite.com/user.php?username=xyz then you can add the following code to the .htaccess file.

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

5) Redirecting the domain to a new subfolder of inside public_html.

Suppose the you’ve redeveloped your site and all the new development reside inside the “new” folder of inside root folder.Then the new development of the website can be accessed like “test.com/new”. Now moving these files to the root folder can be a hectic process so you can create the following code inside the .htaccess file and place it under the root folder of the website. In result, www.test.com point out to the files inside “new” folder.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1

126 thoughts on “5 useful url rewriting examples using .htaccess

  1. I’m thinking about optimizing my url query strings, but want to make sure there isn’t a basic problem with the structure of my site first.

    I recently changed my website from www-dot-dofsbo-dot-com to searches.tittlerealestate.com. The content remains very similar. Suddenly its as if the content of my site is no longer getting crawled. Hits from keywords are limmited to phrases on my home page. The tittlerealestate domain has been around for a long time and should be getting crawled.
    Could the “searches” portion of my url be causing the problem? What do you call the portion of a url preceeding the main url?

    Thanks for the article

  2. well you should have done 301 redirect to the new transferred domain then deleted the content from the old site. I think there is problem with the same content in both place i.e the massive duplicate content problem

  3. Max

    #2 – The title says the opposite of what its actually doing.

    #3 – I’m nitpicking but
    ^optimaxwebsolutions\.com
    will also match optimaxwebsolutions.com.otherwebsite.com

    #5 – Maybe I’m wrong here but I believe rewrite conditions (RewriteCond) must all be true for the RewriteRule to take place. So these two lines
    RewriteCond %{HTTP_HOST} ^test\.com$
    RewriteCond %{HTTP_HOST} ^www\.test\.com$
    can’t both be true, so this rule will never do anything. I think you want to use the [OR] flag.

  4. In the second example you put the value in pid, not id, that might catch newbies out.

    Also, in the fourth example you don’t check for existing directories, so if someone were to go to yoursite.com/about they would get the userpage for About.

  5. Luke, thanks for the heads up..i’ve corrected that one…and in the fourth example you should have rewrite condition if you’ve the about about up page in that manner..

    Max Thanks for the comment, I think i’m valid at point #2. And the other points are you made are absolutely right and i’ve corrected them. Thank for noticing that……

  6. Jason

    Hm.. having meaningful and clean urls could be done originally with something like Django. Where instead of the page being

    product.php?id=12

    You could actually just have..

    /products/12

    or /whatever/ you want by modifying the URLS file in the app’s directory.

    A much cleaner and more elegant solution.

  7. hi jason, I agree with you elegant solution but it doesn’t show the keyword in the URL and from seo point of view it’s better to put the keyword in the URL of the post.

  8. Does [2] mean that the following urls will all point to the same resource?

    product/ipod-nano/12.html
    product/foobar/12.html
    product/test/12.html
    product/example/12.html

  9. ya cheruvim..it all point to the same page because according to the rewrite rule it will all call to the same page product.php?id=12

  10. Decent examples, thanks.

    However, I am a bit confused with the example vs. the caption. Such as:
    1) Rewriting product.php?id=12 to product-12.html
    but your rule is rewriting in the opposite way such as product-12.html to product.php?id=12

    Same thing applied for #2 and #4.

    The syntax for the rewrite rules is:
    RewriteRule Pattern Substitution (see http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule)

    I am missing something?

  11. dear Boyan Kostadinov, well don’t be confused … as you know the normal way of displaying url is product.php?id=12 and since we’re rewriting product.php?id=12 to something else the caption is like so..hope this helps..

  12. lord55

    hi!!!
    i have enable rewrite.my htaccess start with:

    # ugly ugly hack to detect missing mod_rewrite
    # RedirectMatch must be to an absolute destination, so forces 500 error…
    ErrorDocument 500 “Elgg error: Apache does not have mod_rewrite loaded. Please check your apache setup.”
    RedirectMatch 302 .* index.php

    order allow,deny
    deny from all

    # Don’t listing directory
    Options -Indexes

    # Follow symbolic links
    Options +FollowSymLinks

    # Default handler
    DirectoryIndex index.php

    # php 4, apache 1.x

    # default memory limit to 32Mb
    php_value memory_limit 32M
    # to make sure register global is off
    php_value register_globals 0
    # max post size to 8Mb
    php_value post_max_size 8388608
    # upload size limit to 5Mb
    php_value upload_max_filesize 5242880
    # hide errors, enable only if debug enabled
    php_value display_errors 0

    # php 4, apache 2

    # default memory limit to 32Mb
    php_value memory_limit 32M
    # to make sure register global is off
    php_value register_globals 0
    # max post size to 8Mb
    php_value post_max_size 8388608
    # upload size limit to 5Mb
    php_value upload_max_filesize 5242880
    # hide errors, enable only if debug enabled
    php_value display_errors 0

    # php 5, apache 1 and 2

    # default memory limit to 32Mb
    php_value memory_limit 32M
    # to make sure register global is off
    php_value register_globals 0
    # max post size to 8Mb
    php_value post_max_size 8388608
    # upload size limit to 5Mb
    php_value upload_max_filesize 5242880
    # hide errors, enable only if debug enabled
    php_value display_errors 0

    RewriteEngine on

    i call a javascript from a header.php in the root inside “folder1″. i.e:

    -root
    htacess
    main.php
    header.php
    –folder1

    the script is:

    but the javascript doesn’t work and in firebug i have an error:
    syntax error
    [Break on this error] <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.or…

    …and i see in firebug an index page.

    can you give me an help to set this rule nad teach me why?!?! i try and try but no result!
    thanks in advance!!!

  13. lord55

    the javascript i call with:
    script type=’text/javascript’ src=’folder1/?project=time’></script

    from header.php

  14. thanks for this, roshan! I just used it at the last minute before launching a new site today.

  15. nice to hear that tevan…

  16. danny

    Dude!!! I spent 3 hours total yesterday messing w/ mod_rewrite and tutorials from other sites and I could figure out #4. Now that I know, life is tons easier!!!

    p.s. thats why I donated, bc of your great help

  17. wow danny nice to hear that…..you’re the first person to donate in this blog ….

  18. Man… I found this site today via google, and I’m bookmarkin’ it! I’m a very, very new PHP/mySQL dev, so I will be using this site tons! When I get some funds from commercial work, I will be donating. Thank you very much!

  19. nice to hear that Kenai..

  20. Sunil

    Hello.

    I want to rewrite my url which has two parameter. But I am having some problem in rewriting the url.

    I need to rewrite the url product.php?id=12&action=detail to product-12-detail.html.

    So please can u provide me the code???

    Waiting for reply..

    Byee and have a nice day.

  21. Dru

    test – this does not seem to work for me.

  22. Dru

    The question is: if a user goes to: http://www.someisp.com/ they actually are getting served from http://www.someisp.com/store/ yet they only see http://www.someisp.com/

  23. Check out the simplest way of writing URL Rewriting

    http://dotnetguts.blogspot.com/2008/07/url-rewriting-with-urlrewriternet.html

  24. How to rewrite site.com to https://site.com ???

  25. @Arvind – you can check this post for detail about redirecting web site to https :

    http://roshanbh.com.np/2008/05/redirect-browser-https-ssl-php.html

  26. I tried that on my apache setup. Doesn’t seem to work. I just don’t understand. Here’s my htaccess file:

    RewriteEngine on
    RewriteRule ^old\.html$ index.html

    Accessing old.html doesn’t bring me to index.html.

  27. I had found the answer!
    I need to set the overrride in the http.conf to all!
    Still, thanks for the beautiful article.

  28. I use this 5 usefull things thank you for tutorial :)

  29. Thanks, that worked for me. Although there are other simpler rules for .htaccess redirection, but they don’t hide the folder name in address bar.
    This one hides the folder name in the address bar.

  30. mike

    A question, with .htaccess I can type in the URL
    http://www.mysite.com/index22 and get actually http://www.mysite.com/index.php?var=22 however if I have a link in this page linking to http://www.mysite.com/index.php?var=22 and click it the browser will show http://www.mysite.com/index22 or not? Because I have already constracted the site with many links linking to actual files and I do not want to change them all. I want went the user types http://www.mysite.com/index.php?var=22 the address in the URL to become http://www.mysite.com/index22 is it possible?

  31. vick

    hi, can anyone help me out
    i was able to rewrite urls for simple stuff e.g. to products.php?id=xxx but cant for the following:
    /test/ -> /test/index.php?page=xxx&op=xxx&id=xxx
    op and id are optional
    tried the following:
    RewriteRule /(a-z+)/ /index.php?page=$1
    RewriteRule /(a-z+)/(a-z+)/ /index.php?page=$1&op=$2
    RewriteRule /(a-z+)/(a-z+)/(0-9+)/ /index.php?page=$1&op=$2&id=$3
    when i write /test/category it doesnt redirect to test/index.php?page=category but displays error link not found…
    i placed the htaccess in /test/

  32. mike

    Please ignore my previous post I accidentaly posted my previous question I deeply apologise for doing so. What I wanted to ask is thisQ: how based on the values of a variable in t he url to display a different nice URL e.g
    in http://www.mysite.com/index.php?id=110
    id id>100 (which in this example is) ot show
    http://www.mysite.com/albunm/100/
    else if id<100
    http://www.mysite.com/song/100/

  33. nepal977

    Hi webmasters!!!!

    I have incoming url = http://www.abc.mydomain.com
    and i want to point into
    destination url= http://www.mydomain.com/abc.php
    and i need to this via htaccess
    Please help

  34. Aditya

    I am new here. I have a problem , i shall be thankfull if anybody could help me out.
    I am working on a ecommerce site, which reqires that only the product name to be visible in url, without any id or any number
    for instance
    Url for category
    http://www.domain.com/category_name/
    Url for Products
    http://www.domain.com/category_name/product_name/

    Thanks in advance

  35. hey thankx works fine for me ( 1st one not tried other 3 ) but is working not like other tuts i found who just boast a lot of language and the script rarely work.
    One more problem.
    i need to rewrite a.php?action=show&id=10 to something like a-show-10.html
    this would be helpfull

    Thanx again

  36. first one is the best and its will work. its also important on SEO and google.
    since Google will link HTML pages than other dynamic page.

  37. first one is the best and its will work. its also important on SEO and google.
    since Google will like HTML pages than other dynamic pages link php or jsp.

  38. Sathish Menon

    Hi Roshan
    thanks for the easy steps!

    I was able to use it for my current site and hop to use in future also!
    thanks again!

  39. In the url, I want to use .php extension instead of .html( ‘About-Us.html’) http://vebproject.com/cms/About-Us.html.

    in .htaccess file, I have used:
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9_-]+)\.html$ index.php?menuid=$1
    But If I change \.html$ to \.php$, no output is come.

    Would you plz help me.

    MOHIT

  40. I have a domain http://www.timefreedomnow.net/?username that I would like to rewrite to http://www.timefreedomnow.net/profile/username. Can anyone help me with this please?

    Thanks,

    Sean McGilvray

  41. samik

    nice example …… working fine …. thnx a lot

  42. Zahid H

    Hi,
    I’ve read all your post, and have tried some of the rules and does wonders… I am new to .htaccess, and my situation requires multiple rules to be applied
    this is how my url is
    http://www.someurl.com/page/index.php?page=Contact_US
    by following your example 5
    I know has this
    http://www.someurl.com/index.php?page=Contact_US
    I now added example 4 with 5
    but I can’t get through…
    ALL HELP WOULD BE APPRECIATED

  43. Hi,

    I want to write user and SEO friendly URL. I want to redirect a user from this URL (http://www.developerconcepts.com/java/class/introduction.php) to this URL (http://www.developerconcepts.com/devc/introduction.php?tbl_top_tech_id=123&tbl_tech_id=454).

    Kindly let me know how to do it?

    Thank you very much in advance.

  44. Hello, thanks for such a great article, I need a little help can you tell me how can I display ” ‘ ” in my site url. Thanks a lot.

  45. Vasim

    hello
    i want to solve below problem :

    actual URL is :

    http://www.domain.com/dir/index.php?category=XXX&subcat=YYY

    must be become as below :

    http://www.domain.com/dir/Advetising/Books/

    thank you.

  46. anusha

    Really u r article is very easy to understand.

    I have a .htaccess file in my rootfolder. ?I want to rewrite the url as follows.
    change
    (http://www.domain.com/Home Page.php)
    to
    (http://www.domain.com/home page.php).
    i.e to rewrite my url to lower case.

    U have given 5 useful examples. Can u please help me to do this.

    I have done some code. Actually it is rewriting into lower case, but it is not redirecting.
    I got the 404 error.
    Thanks

  47. Hi Roshan,

    How to write rewrite this URL using .htaccess

    http://xyz.com/abc.php?id=foxscan&page=1 to xyz.com/foxscan?page=1

  48. Well Roshan, i really appreciate your work.

    You have quick tutorials.

    a click from me on your sponsor’s you just got it…..

  49. Sudhir

    i find your blog is very useful. I am very new to .htaccess. By following your tutorial also i cant made it. please help me
    My current url goes like this-
    http://localhost/mypage/dashboard.php?m=services&p=services.new
    now i need to display it as-
    http://localhost/mypage/dashboard-services-servicesnew.html

    How can i do this?
    Thanks in advance

  50. Web Checker

    Hey

    This is a very good article :) Impressed. All 5 examples are extremly useful and used often.

    Thank much

    Web Checker

Comments are closed.