Manually 301 redirecting multiple pages

Discuss practical ways rearrange URLs using mod_rewrite.

Manually 301 redirecting multiple pages

Postby Tigerman » Sat Mar 07, 2009 10:27 am

Hello everyone,

I hope someone here is able to help me with this. I've attempted various solutions and asked various sources, but haven't been able to get an answer that resulted in success yet. Here's the challenge:

I've recently changed all of my site's URL page names and now I'm trying to do 301 redirects for all my old pages. (Unfortunately, I have to do each one manually). Following advice I found from several sources through a Google search, I added this line to my .htaccess file for my first page redirect:

Code: Select all
redirect 301 /oldpage.php http://www.example.com/newpage.php


Unfortunately, it doesn't work. I get a 404 page not found error when I type in the old page URL. And in the address bar it says:

http://www.example.com/newpage.php?q=oldpage.php

I've tried to place the code in different locations within my .htaccess file, but it still didn't work.

It should be noted that I also have a mod rewrite for a canonical URL redirect (non-www to www) and I think this code may be conflicting in some way with the above line (just a guess). Here's my complete .htaccess file.

Code: Select all
# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., "/modx" if your installation is in a "modx" subdirectory. If you have
# problems with your .htaccess working at all, try un-commenting the first
# line above the "RewriteEngine On" directive.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

#Options +FollowSymlinks
RewriteEngine On
RewriteBase /



#Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# >>> DO NOT USE BOTH THE ABOVE AND BELOW <<<
#
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.mannequinmarket\.com
RewriteRule (.*) http://www.mannequinmarket.com/$1 [R=301,L]



# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]



# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]


# The Friendly URLs part with regard to Subdirectories
# If you have your MODx installed in a subfolder of your web space
# (such as /modx/) then you need to use the following line:
# RewriteRule ^(.*)$ /~mm/index.php?q=$1 [L,QSA,NC]

# This might work
RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/



# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.

#AddType text/x-component .htc



# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.

#php_flag register_globals Off



# For servers that support output compression, you should pick up a bit of
# speed but un-commenting the following lines.

#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5



# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary


Any suggestions or input would be greatly appreciated. Thank you very much.

- Ruben
Tigerman
 
Posts: 4
Joined: Sat Mar 07, 2009 7:20 am

Postby richardk » Sun Mar 08, 2009 7:37 am

It's a conflict between mod_rewrite and mod_alias. The last rewrite rule also runs and q=oldpage.php is therefore added.

Doing the redirects with mod_rewrite should fix it
Code: Select all
RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/
Options +FollowSymLinks

RewriteEngine On

RewriteRule ^oldpage\.php$ http://www.example.com/newpage.php [R=301,L]

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

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?q=$1 [NC,QSA,L]
richardk
 
Posts: 8800
Joined: Wed Dec 21, 2005 7:50 am

Postby Tigerman » Sun Mar 08, 2009 10:49 am

Great! Thank you for the advice. That sounds like it will work. However, I'm a bit confused as to how I should implement that code you posted. I know I already have some of it, so should I erase the current lines I have, then consolidate the code you gave me after all the current code? Forgive my ignorance...

Thank you for your help.
Tigerman
 
Posts: 4
Joined: Sat Mar 07, 2009 7:20 am

Postby Tigerman » Sun Mar 08, 2009 12:09 pm

Thanks Richardk! I got it to work!

Here's what I did:

1.) Commented (placed a '#' in front of) all rewrite code
2.) Put the entire block of code richardk gave me at the very bottom after all comments with my site info

Is this correct? Here's my .htaccess code now.

Code: Select all
# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., "/modx" if your installation is in a "modx" subdirectory. If you have
# problems with your .htaccess working at all, try un-commenting the first
# line above the "RewriteEngine On" directive.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

#Options +FollowSymlinks
# RewriteEngine On
# RewriteBase /



#Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# >>> DO NOT USE BOTH THE ABOVE AND BELOW <<<
#
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www\.mannequinmarket\.com
# RewriteRule (.*) http://www.mannequinmarket.com/$1 [R=301,L]



# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]



# The Friendly URLs part
# RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]


# The Friendly URLs part with regard to Subdirectories
# If you have your MODx installed in a subfolder of your web space
# (such as /modx/) then you need to use the following line:
# RewriteRule ^(.*)$ /~mm/index.php?q=$1 [L,QSA,NC]

# This might work
RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/



# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.

#AddType text/x-component .htc



# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.

#php_flag register_globals Off



# For servers that support output compression, you should pick up a bit of
# speed but un-commenting the following lines.

#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5



# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary

RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/
Options +FollowSymLinks

RewriteEngine On

RewriteRule ^body-form-female-f5\.php$ http://www.mannequinmarket.com/body-form-02.php [R=301,L]

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

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?q=$1 [NC,QSA,L]


Since it works for redirecting one page, I assume it will work with multiple URLs, correct? Should I just place the following line after the current line for each additional page I need to redirect?

Code: Select all
RewriteRule ^oldpage\.php$ http://www.mannequinmarket.com/newpage.php [R=301,L]



Thank you again, very much!
Tigerman
 
Posts: 4
Joined: Sat Mar 07, 2009 7:20 am

Postby Tigerman » Sun Mar 08, 2009 4:03 pm

I just wanted to let you know that I am having great success with this method. Thank you again for your help! Here's how my .htaccess file code looks:

Code: Select all
# MODx supports Friendly URLs via this .htaccess file. You must serve web
# pages via Apache with mod_rewrite to use this functionality, and you must
# change the file name from ht.access to .htaccess.
#
# Make sure RewriteBase points to the directory where you installed MODx.
# E.g., "/modx" if your installation is in a "modx" subdirectory. If you have
# problems with your .htaccess working at all, try un-commenting the first
# line above the "RewriteEngine On" directive.
#
# You may choose to make your URLs non-case-sensitive by adding a NC directive
# to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]

#Options +FollowSymlinks
# RewriteEngine On
# RewriteBase /



#Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# >>> DO NOT USE BOTH THE ABOVE AND BELOW <<<
#
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www\.mannequinmarket\.com
# RewriteRule (.*) http://www.mannequinmarket.com/$1 [R=301,L]



# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
# https://www.domain.com when your cert only allows https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]



# The Friendly URLs part
# RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]


# The Friendly URLs part with regard to Subdirectories
# If you have your MODx installed in a subfolder of your web space
# (such as /modx/) then you need to use the following line:
# RewriteRule ^(.*)$ /~mm/index.php?q=$1 [L,QSA,NC]

# This might work
RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/



# Make sure .htc files are served with the proper MIME type, which is critical # for XP SP2. Un-comment if your host allows # htaccess MIME type overrides.

#AddType text/x-component .htc



# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.

#php_flag register_globals Off



# For servers that support output compression, you should pick up a bit of
# speed but un-commenting the following lines.

#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5



# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary

RedirectMatch 301 ^/~mm/$ http://www.mannequinmarket.com/
Options +FollowSymLinks

RewriteEngine On

RewriteRule ^abstract-female-b1\.php$ http://www.mannequinmarket.com/abstract-mannequin-01.php [R=301,L]

RewriteRule ^abstract-female-bl5\.php$ http://www.mannequinmarket.com/abstract-mannequin-04.php [R=301,L]

RewriteRule ^abstract-female-gr5\.php$ http://www.mannequinmarket.com/abstract-mannequin-07.php [R=301,L]

RewriteRule ^abstract-female-s3\.php$ http://www.mannequinmarket.com/abstract-mannequin-11.php [R=301,L]

RewriteRule ^abstract-female-w4\.php$ http://www.mannequinmarket.com/abstract-mannequin-13.php [R=301,L]

RewriteRule ^abstract-male-bl17\.php$ http://www.mannequinmarket.com/abstract-mannequin-18.php [R=301,L]

RewriteRule ^abstract-male-r17\.php$ http://www.mannequinmarket.com/abstract-mannequin-20.php [R=301,L]

RewriteRule ^abstract-male-s16\.php$ http://www.mannequinmarket.com/abstract-mannequin-22.php [R=301,L]

RewriteRule ^abstract-male-w10\.php$ http://www.mannequinmarket.com/abstract-mannequin-23.php [R=301,L]

RewriteRule ^abstract-male-w15\.php$ http://www.mannequinmarket.com/abstract-mannequin-26.php [R=301,L]

RewriteRule ^abstract-male-y17\.php$ http://www.mannequinmarket.com/abstract-mannequin-27.php [R=301,L]

RewriteRule ^abstract\.php$ http://www.mannequinmarket.com/abstract-mannequins.php [R=301,L]

RewriteRule ^active-golfer-w9\.php$ http://www.mannequinmarket.com/sports-mannequin-07.php [R=301,L]

RewriteRule ^active-skier-s8\.php$ http://www.mannequinmarket.com/sports-mannequin-10.php [R=301,L]

RewriteRule ^adjustable-adam\.php$ http://www.mannequinmarket.com/flexible-mannequin-01.php [R=301,L]

RewriteRule ^adjustable\.php$ http://www.mannequinmarket.com/flexible-mannequins.php [R=301,L]

RewriteRule ^animal-statue-01\.php$ http://www.mannequinmarket.com/dog-statue-01.php [R=301,L]

RewriteRule ^animals\.php$ http://www.mannequinmarket.com/animal-statues.php [R=301,L]

RewriteRule ^attractive-alley\.php$ http://www.mannequinmarket.com/female-mannequin-02.php [R=301,L]

RewriteRule ^attractive-amy\.php$ http://www.mannequinmarket.com/ethnic-mannequin-01.php [R=301,L]

RewriteRule ^baby-boy-f3\.php$ http://www.mannequinmarket.com/child-mannequin-01.php [R=301,L]

RewriteRule ^baby-girl-f2\.php$ http://www.mannequinmarket.com/child-mannequin-03.php [R=301,L]

RewriteRule ^baby-group-f14\.php$ http://www.mannequinmarket.com/child-mannequin-14.php [R=301,L]

RewriteRule ^bendable-barbara\.php$ http://www.mannequinmarket.com/flexible-mannequin-02.php [R=301,L]

RewriteRule ^body-form-female-f1\.php$ http://www.mannequinmarket.com/body-form-01.php [R=301,L]

RewriteRule ^body-form-female-f2\.php$ http://www.mannequinmarket.com/body-form-02.php [R=301,L]

RewriteRule ^body-form-female-f4\.php$ http://www.mannequinmarket.com/body-form-04.php [R=301,L]

RewriteRule ^body-form-female-f5\.php$ http://www.mannequinmarket.com/body-form-05.php [R=301,L]


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

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?q=$1 [NC,QSA,L]
Tigerman
 
Posts: 4
Joined: Sat Mar 07, 2009 7:20 am


Return to Friendly URLs with Mod_Rewrite

Who is online

Users browsing this forum: No registered users and 21 guests

cron