FREE THOUGHT · FREE SOFTWARE · FREE WORLD

Home » Htaccess » 301 Redirect with mod_rewrite or RedirectMatch

301 Redirect with mod_rewrite or RedirectMatch

301 Redirect with mod_rewrite or RedirectMatch 301 Redirect with mod_rewrite or RedirectMatch

301 Redirect with mod_rewrite or RedirectMatch

March 2nd, 2007

The Apache Web Server provides a couple ways to issue 301 Redirects from within .htaccess or httpd.conf files.

When do you need a 301 Redirect?

  • When you change your domain name
  • When you change a URL
  • When external links pointing to your site or pages are old or invalid

301 Redirects using mod_alias

Using mod_alias we have access to these directives: Redirect, RedirectMatch, RedirectPermanent, and RedirectTemp. You only need to know that RedirectMatch allows pattern matching and Redirect is only for a single file.

301 Redirects using Redirect

Redirect 301 /2007/webmaster/custom-phpini-with-fastcgi-on-dreamhost.html http://www.askapache.com/dreamhost/custom-phpini-with-fastcgi-on-dreamhost.html
Redirect 301 /2007/phpbb/sending-post-form-data-with-php-curl.html http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html
Redirect 301 /htaccess.txt /wp-content/uploads/p/htaccess.txt
Redirect 301 /2007/webmaster/php-and-ajax-shell-console.html http://www.askapache.com/tools/php-and-ajax-shell-console.html
Redirect 301 /2007/webmaster/custom-phpini-with-fastcgi-on-dreamhost.html http://www.askapache.com/dreamhost/custom-phpini-with-fastcgi-on-dreamhost.html

301 Redirects using RedirectMatch

RedirectMatch 301 ^/(.*)\.htm$ http://www.askapache.com/$1.html
RedirectMatch 301 ^/200([0-9])/([^01])(.*)$ http://www.askapache.com/$2$3
RedirectMatch 301 ^/category/(.*)$ http://www.askapache.com/$1
RedirectMatch 301 ^/(.*)/htaccesselite-ultimate-htaccess-article.html(.*) http://www.askapache.com/htaccess/htaccess.html
RedirectMatch 301 ^/(.*)\.html/1/(.*) http://www.askapache.com/$1.html$2
RedirectMatch 301 ^/manual/(.*)$ http://www.php.net/manual/$1
RedirectMatch 301 ^/dreamweaver/(.*)$ http://www.askapache.com/tools/$1
RedirectMatch 301 ^/z/(.*)$ http://static.askapache.com/$1

301 Redirects with mod_rewrite

mod_rewrite is a powerful Apache module, and you should read more about it before you cause a problem.

301 Redirects using mod_rewrite

RewriteRule .* http://www.askapache.com/$1 [R=301,L]
 
RewriteRule ^(.*)\.html([^c]+)comment-(.+)$ http://www.askapache.com/$1.html#comment-$3 [R=301,L,NE]

http://www.askapache.com/htaccess/301-redirect-with-mod_rewrite-or-redirectmatch.html#comments

Reader Comments

  1. Pingback:301 Redirect Top-Level but Ignore Sub Directories using RedirectMatch | Spenser Baldwin

  2. trolololo ~February 8, 2011 @ 1:50 pm
    I think you have a couple extra "(" and one too many "/", also adjust your forth "*" and second "^"
  3. cameron ~August 16, 2010 @ 10:22 pm
    Any idea why this would not be rewriting?
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^something\.example\.com$
    RewriteRule ^(.*)$ http://somewhere.example.net/someplace/ [R=301,L]
    The redirect is working BUT it is appending the original requested location onto the destination. So for example without all the subdomains and directories just to show what is being appended: http://example.com/?2087 is supposed to just go to http://example.net but it is going to: http://example.net/?2087 The same code works as expected on some of my servers but not on others. Could another redirect or directory entry in httpd.conf be overriding this ion the ones that are not working?
  4. maguai ~June 23, 2010 @ 7:33 pm
    I used your link above as a guide to redirect all pages with a slash at the end to .html RedirectMatch 301 ^/(.*)/$ http://www.example.net/$1.html but google says I still have pages without the slash (previously wordpress) that show 404. I tried RedirectMatch 301 ^/(.*)$ http://www.example.net/$1.html but this didn't work. any ideas. I have 2 other site to redirect, some with 100+ pages so individually wont work. Ive looked anywhere, any idea? Thanks!
  5. JT Stone ~June 15, 2010 @ 8:03 pm
    Thanks for this info. I was looking for this information - so glad I found it.
  6. Atif ~June 4, 2010 @ 8:10 am
    Thanks, this is what i needed. Just one thing, if new and old urls are both on the same domain, why it does not work without full new/destination URL:
    Redirect 301 /some-page.html /new-page.html
    It does not work. you have to write:
    Redirect 301 /some-page.html  http:www.example.com/new-page.html
  7. Dan ~May 6, 2010 @ 12:13 am

    How do you redirect an exe or zip file?

    I've tried:

    Redirect 301 http://www.site.com/old/software.exe http://www.site.com/new/software.exe

    But it doesn't work...

  8. SirJ ~March 9, 2010 @ 6:12 pm
    hi have a nice time. i have many of address forum one page !! how can i lock only 1 link for every page. for example : i have : modules.php?name=news news.html news.php now i want only news.html for page ! and when any user type modules.php?name=news in address bar , redirect to news.html sorry for my very bad english . i m waiting for you answer. thanks a lot.
  9. Liew Cheon Fong ~November 24, 2009 @ 11:55 am
    Great! Thank you very much! It solved my problem to redirect /blog/blog-posts/ to /blog-posts/ :)
  10. B George ~August 6, 2009 @ 8:41 am
    Hi, I’m using a tool to crawl my web pages. And the tool says I’ve duplicate pages. The duplicates are below: 1. / 2. /index.php Is it necessary and possible to redirect (1) to (2)? Thanks, Biju.
  11. AskApache ~April 19, 2009 @ 12:19 pm
    RedirectMatch 301 ^/(.*)posts(.*)$ http://www.askapache.com/$1donations$2
  12. kitten13 ~April 18, 2009 @ 4:10 pm
    Hello, I try desperately to apply your advice without success, I need to replace the words posts by donations in my url. So I did this but this does not :
    RewriteCond %{HTTP_HOST} !^$
    RewriteCond %{HTTP_HOST} !^([-]?[0-9]+)([-_][^/]*)?/posts/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?\.html$ [NC]
    RewriteRule ^/(.*)$ ([-]?[0-9]+)([-_][^/]*)?/dons/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?\.html$1 [L,R=301]
    or
    RedirectMatch 301 ^([-]?[0-9]+)([-_][^/]*)?/posts/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?\.html$
     
    /([-]?[0-9]+)([-_][^/]*)?/dons/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?/([0-9]+)([-_][^/]*)?\.html
    Could you tell me where is my mistake. Thank you for your help best regards

Add Comment!

Leave a Reply

Your email address will not be published.


Google +

It's very simple - you read the protocol and write the code. -Bill Joy

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. NCSA HTTPd.
UNIX ® is a registered Trademark of The Open Group. POSIX ® is a registered Trademark of The IEEE.

Site Map | Contact Webmaster | Glossary | License and Disclaimer | Terms of Service |

↑ TOPMain