Redirection not working, or unexpected redirection occurring

Redirection, when setup using the cPanel redirection tools, places Apache Mod Rewrite instructions in a special file called .htaccess

This file will usually exist in the virtual root directory of the domain you are attempting to redirect.

When redirection doesn't work as expected or at all

Example - You want to redirect your cPanel's primary domain https://krystaldemo.co.uk to https://somethingelse.co.uk

The root directory for https://krystaldemo.co.uk is public_html.

In this case, the redirection instructions will be added to public_html/.htaccess

Even if you wanted to redirect https://krystaldemo.co.uk/shop/cart to https://myshop.com the redirection would still be added to public_html/.htaccess

The probable cause of redirection failing

If your website is based on a Content Management System (WordPress, Joomla, Drupal etc) or an e-commerce package then there is a good chance that this software has already stuffed .htaccess full of other instructions.

It's unreasonable to expect cPanel to understand the ins and outs of every software package in existence, so cPanel simply adds it's redirection instructions to the end of the .htaccess file (i.e. at the bottom of it.)

Here is a typical .htaccess file after WordPress has been installed:

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

RewriteCond %{HTTP_HOST} ^krystaldemo\.co\.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www\.krystaldemo\.co\.uk$
RewriteRule ^shop\/$ "http\:\/\/myshop\.com\/" [R=301,L]

You can see here, that WordPress has pushed its instructions in at the top of the .htaccess file. cPanel's instructions (the last three lines) get pushed to the bottom. "So what?" You might well say.

The problem is those [L] tags you see on the end of some of the WordPress instructions. This tells Apache not to process any further instructions in the .htaccess file. Therefore your redirection never gets executed.

The way to fix this is to edit this file so that it looks like this:

RewriteCond %{HTTP_HOST} ^krystaldemo\.co\.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www\.krystaldemo\.co\.uk$
RewriteRule ^shop\/$ "http\:\/\/myshop\.com\/" [R=301,L]

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Generally speaking, it is important to get any major redirection out of the way before anything else.

When redirection is unexpected and unwanted!

The most common cause for unexpected redirection and infinite redirection loops is that .htaccess files are inherited by sub-directories.

Let's suppose you added an Addon domain to your cPanel account called mysecondwebsite.co.uk - so your public_html directory looked a bit like this:

public_html
├── .htaccess
├── {a whole bunch of other files and directories that make up your primary website)
└── mysecondwebsite.co.uk
├── images
│ └── header.jpg
├── index.php
└── styles.css

The .htaccess file at the top will influence not only your primary website but also all of your addon website including the header.jpg file.

If one isn't careful when using mod_rewrite instructions (RewriteRule, RewriteCond etc.), then it is possible to accidentally redirect mysecondwebsite.co.uk back to the primary domain and cause all kinds of headaches and confusion.

You can prevent the public_html/.htaccess file from influencing mysecondwebsite.co.uk, above, by placing another .htaccess file at

/public_html/mysecondwebsite.co.uk/.htaccess

with this at the top of it

RewriteEngine off

This will effectively disable mod_rewrite for the addon domain. Of course, if you still need to use mod_rewrite in your second domain, then you will need to determine exactly what it is in the public_html/.htaccess file that is upsetting your addon domain and find a way to exclude it or move your addon domain to a directory above public_html so that it is not influenced by it. This technique is discussed in the article Understanding Primary, Parked and Addon Domains.


How did we do?


Powered by HelpDocs (opens in a new tab)
© Krystal Hosting Ltd 2002–