Adam W
Adam W

Reputation: 73

Mod_rewrite - redirect old urls to the new ones

I'm looking for a solution to redirect old urls (e. g. aboutme.php) to the new ones (same /about-me).

The problem is: if I'll go to example.com/aboutme.php, the user is not redirected to pretty url (/about-me). Adding R=301 doesn't help - it makes /about-me redirect to aboutme.php.

Here's my .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^(.*) http://example.com/$1 [R=301,L]

# Specify search friendly URLs
RewriteRule ^about-me$ /aboutme.php [L]
RewriteRule ^portfolio$ /portfolio.php [L]
RewriteRule ^motion$ /motion.php [L]
RewriteRule ^contact$ /contact.php [L]
RewriteRule ^contact-thanks$ /contact_thanks.php [L]



</IfModule>

Upvotes: 0

Views: 75

Answers (1)

Raphael M&#252;ller
Raphael M&#252;ller

Reputation: 2200

You have to make it in the other direction.

If you want to rewrite aboutme.php to about-me

you should use

RewriteRule ^aboutme.php /about-me [R=301,L]

EDIT:

The place /about-me has to be present. If not, you can redirect this virtual place to a file (say rewrite.php) which gets the actual file from database or some configuration. Place the following rules at the bottom of your htaccess rules.

#don't rewrite the rewrite script
RewriteRule rewrite.php - [L]

#as example don't rewrite the image folder
RewriteRule ^images - [L]

#everything else that doesn't match a rule
RewriteRule ^(.*)$ rewrite.php?file=$1 [QSA,L]

after that you can access your requested virtual file in rewrite.php with $_GET['file'].

EDIT:

your rewrite.php could look like this: (this is the simplest way todo. but you have to do some error checking etc.)

<?php
$file = $_GET['file'];
$config = array(
    'about-me' => 'aboutme.php'
);
include($config[$file]);
?>

Upvotes: 2

Related Questions