« Control htaccess Basic Authentication with PHP and mod_rewrite27 Request Methods for Apache rewritecond htaccess »
301 Redirect with mod_rewrite or RedirectMatch
March 2nd, 2007
Contents
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.
- mod_rewrite questions and answers forum filled with example mod_rewrite code
- mod_rewrite Tips and Tricks
- URL Rewriting Guide
- Replacing ˜%23² with ˜#' in incoming links
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]
Reader Comments
Pingback:301 Redirect Top-Level but Ignore Sub Directories using RedirectMatch | Spenser Baldwin
-
I think you have a couple extra "(" and one too many "/", also adjust your forth "*" and second "^"
-
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/?2087is supposed to just go tohttp://example.netbut it is going to:http://example.net/?2087The same code works as expected on some of my servers but not on others. Could another redirect or directory entry inhttpd.confbe overriding this ion the ones that are not working? -
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!
-
Thanks for this info. I was looking for this information - so glad I found it.
-
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
-
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...
-
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.
-
Great! Thank you very much! It solved my problem to redirect /blog/blog-posts/ to /blog-posts/ :)
-
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.phpIs it necessary and possible to redirect (1) to (2)? Thanks, Biju. -
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]orRedirectMatch 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
