301 Redirect - Joomla

Hi,

I have the following problem:

I have a joomla 1.1.15 website that is clearly obsolete, and it is in a subfolder. It has non sef urls that are indexed by google.

In the root i have joomla 2.5 with good urls. All i want is to redirect all traffic from the subfolder (all the non sef urls) to the root.

I have partially done it with a redirect from subfolder to root with:

RewriteRule ^subfolder\\?$ "http\\:\\/\\/www\\.my\\-web\\.com\\/" [R=301,L]

But that code does not redirect all other pages i.e.

www.my-web.com/subfolder/index.php?option=com_content&task=view&id...

I am strugling to find a correct solution that would point all those index.php links from my subfolder site to the new root site.

This is how the part of custom redirects in my .htaccess looks like:

## Begin - Custom redirects
#
RewriteRule ^subfolder\\?$ "http\\:\\/\\/www\\.my\\-web\\.com\\/" [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\\ /([^/]+/)*index\\.html?\\ HTTP/
RewriteRule ^(([^/]+/)*)index\\.html?$ http://www.my-web.com/$1 [R=301,L]
#
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\\ /([^/]+/)*index\\.php\\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^(([^/]+/)*)index\\.php$ http%2://www.my-web.com/$1 [R=301,L]
#
RewriteCond %{HTTP_HOST} !^(www\\.my-web\\.com)?$
RewriteRule (.*) http://www.my-web.com/$1 [R=301,L]
#
## End - Custom redirects

With respect,
nis4

4,

Welcome to SitePoint!

Are your two Joomla installations sharing the same database?

If so, that’s great as it limits you to two problems:

First, redirecting to the DocumentRoot is simple. All that is would be removing the subfolder (and that’s one of the examples in my signature’s tutorial).

The second problem you referred to obliquely - convert OLD links (from Google) to the new link format. Since I’ve not studied how Joomla creates its SEO links, I can’t comment on that except to say that it would be a smart thing to do to generate a new script in the subfolder which performs a lookup of the id (presuming that’s the non SEF URI contents) and create an SEF version and redirect to the non-subfolder (DocumentRoot) version with a 200 status. That’s not an insurmountable problem if you’re reasonably proficient with PHP.

Then, WHY IN THE WORLD DO YOU THINK YOU NEED TO ESCAPE EVERY CHARACTER IN YOUR REDIRECTIONS? You do not need to (read should NOT) escape any character in your redirection (assuming that you’re following URI guidelines at http://www.ietf.org/rfc/rfc2396.txt, i.e., using allowed characters or encoding, not escaping, the reserved characters).

# Please use [noparse]

[/noparse] for your mod_rewrite code

RewriteEngine on
RewriteRule ^subfolder(/[a-z.]+)?$ http://www.my-web.com$1 [R=301,L]

Try that to resolve your first problem.

Regards,

DK

Hi dklynn,

They are using 2 diferrent db-s. The first website (the one in subfolder) was made by a person before me, and it was like that for a few years.
Now i made a new website in the root, and would not like that users who click on old links (from external sources) or the ones that are still in google, to have a 404 page.

Instead i think it is smarter to have a 301 redirect for less traffic loss.

I tried your rewrite rule, but now the non sef urls from the subfolder generate a 404 page.

I don’t have experience in .htaccess, that is what i coud come up reading a few guidliness and tutorials.

I would like to point out that i have deleted the .htaccess from the subfolder. This is the whole .htaccess from the root (with your rewrite rule code).

It redirects the subfolder /old to roo corectly, but links in the /old subfolder that start with "/old/index.php… are not being redirected. In my case they were active links, in your case they are 404 pages.

Thank you for your time, i really appreciate it.

@package Joomla
@copyright Copyright (C) 2005 - 2012 Open Source Matters. All rights reserved.
@license GNU General Public License version 2 or later; see LICENSE.txt

READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!

The line just below this section: 'Options +FollowSymLinks' may cause problems with some server configurations. It is required for use of mod_rewrite, but may already be set by your server administrator in a way that dissallows changing it in your .htaccess file. If using it causes your server to error out, comment it out (add # to beginning of line), reload your site in your browser and test your sef url's. If they work, it has been set by your server administrator and you do not need it set here.

Can be commented out if causes errors, see notes above.

[B] For security reasons, Option followsymlinks cannot be overridden.
Options +FollowSymLinks
Options +SymLinksIfOwnerMatch

Mod_rewrite in use.

RewriteEngine On

Begin - Rewrite rules to block out some common exploits.

If you experience problems on your site block out the operations listed below

This attempts to block the most common type of exploit `attempts` to Joomla!

Block out any script trying to base64_encode data within the URL.

RewriteCond %{QUERY_STRING} base64_encode[^(]\([^)]\) [OR]

Block out any script that includes a <script> tag in URL.

RewriteCond %{QUERY_STRING} (<|%3C)([^s]s)+cript.(>|%3E) [NC,OR]

Block out any script trying to set a PHP GLOBALS variable via URL.

RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]

Block out any script trying to modify a _REQUEST variable via URL.

RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

Return 403 Forbidden header and show the content of the root homepage

RewriteRule .* index.php [F]

End - Rewrite rules to block out some common exploits.

Begin - Custom redirects

RewriteRule ^old(/[a-z.]+)?$ http://www.my-web.com$1 [R=301,L]
RewriteCond %{THE_REQUEST} [1]{3,9}\ /([^/]+/)index\.html?\ HTTP/
RewriteRule ^(([^/]+/)
)index\.html?$ http://www.my-web.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} [2]{3,9}\ /([^/]+/)index\.php\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^(([^/]+/)
)index\.php$ http%2://www.my-web.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} !^(www\.fis-bih\.com)?$
RewriteRule (.*) http://www.my-web.com/$1 [R=301,L]

End - Custom redirects

Uncomment following line if your webserver’s URL is not directly related to physical file paths.

Update Your Joomla! Directory (just / for root).

RewriteBase /

Begin - Joomla! core SEF Section.

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

If the requested path and file is not /index.php and the request has not already been internally rewritten to the index.php script

RewriteCond %{REQUEST_URI} !^/index\.php

and the request is for something within the component folder, or for the site root, or for an extensionless URL, or the requested URL ends with one of the listed extensions

RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]

and the requested path and file doesn’t directly match a physical file

RewriteCond %{REQUEST_FILENAME} !-f

and the requested path and file doesn’t directly match a physical folder

RewriteCond %{REQUEST_FILENAME} !-d

internally rewrite the request to the index.php script

RewriteRule .* index.php [L]

End - Joomla! core SEF Section.


  1. A-Z ↩︎

  2. A-Z ↩︎