Search code examples
.htaccesshttp-redirecthttp-status-code-301

Which .htaccess file should I be using for 301 redirects?


This is one of those super-simple questions that I can't seem to google an answer for, so apologies in advance.

When I ftp into my (shared) server, I have a file structure like this:

  • Root (/)

    • /public_html
        • /newdomain.com

  • I had an old website that lived in /public_html, it had heaps of content and excellent SEO. We changed our name and our domain (which lives in /newdomain.com, a folder inside /public_html), and set 301 redirects from all the old content to the new website.

    I tried doing this myself, but it didn't work at all, so I got my host's techsupport to do it for me. There are several .htaccess files on my server though, and I don't know which ones are actually effective and which aren't.

  • Root has its own .htaccess file
  • public_html has its own .htaccess file
  • /newdomain.com DOESN'T have its own .htaccess file

Redirection 1 (currently is in both root and public_html's .htaccess files, and works)

I want to redirect http://olddomain.com/whatever -> http://newdomain.com/whatever (I've currently got each individual page doing its own separate 301 versus a single rule doing this). Achieved with Redirect 301 /article-name-here/ http://www.newsite.com/article-name-here/

Redirection 2 (currently is in both root and public_html's .htaccess files, and doesn't work).

I also want to do some internal redirections of http://newdomain.com/oldpage.html -> http://newdomain.com/newpage.html. I've tried redirection public_html's .htaccess file like so:

Redirect 301 http://newsite.com/badpage.html http://newsite.com/goodpage.html

But it's not working. Do I need to set up a new .htaccess in the newsite.com folder on my server? Or am I just completely missing the mark here?


Solution

  • Redirection 1

    To redirect everything, just remove the article name:

    Redirect 301 / http://www.newsite.com/
    

    Or if you don't want to redirect the root (i.e. requests for /), then:

    RedirectMatch 301 ^/(.+)$ http://www.newsite.com/$1
    

    Redirection 2

    If the /newdomain directory is the document root for http://newdomain.com/, then you'll need to create a new htaccess file there and include:

    Redirect 301 /badpage.html /goodpage.html