We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25678
    • 36 Posts
    I’ve recently changed all of my site’s URL page names and I’m trying to do 301 redirects for all my old pages. Here’s what I put in my .htaccess file:

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


    Problem is, 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

    What am I doing wrong and why is it not redirecting properly?

    Thank you.

    P.S. I don’t know if it makes a difference, but I put the redirect code at the bottom of my existing .htaccess code, with a line of space above it.
      • 36592
      • 970 Posts
      I’m not familiar with .htaccess URL rewriting, but...
      Quote from: RubenC at Mar 06, 2009, 05:24 AM

      P.S. I don’t know if it makes a difference, but I put the redirect code at the bottom of my existing .htaccess code, with a line of space above it.
      I think this is the problem.
      Place it before modx friendly URL rewriting.
        • 16278
        • 928 Posts
        If the existing .htaccess file includes rewrite rules for friendly URLs (presumably this is where the ?q=oldpage is coming from), you’re asking for trouble by mixing them with Redirect 301 lines - better to redirect the old addresses using extra rewrite rules. A quick Google on mixing the two methods warns against it, as you can’t guarantee what order they will be processed in. How about posting your htaccess file? rolleyes
        KP
        (New Year’s resolution: learn to use mod rewrite fully. Pending...)
          • 25678
          • 36 Posts
          Thanks guys,

          Here’s my .htaccess file:

          # 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


          I do have another rewrite rule going on, so that may be the problem...
            • 16278
            • 928 Posts
            Has this changed since your original post?
            Something on the stackoverflow site that may be helpful:
            http://stackoverflow.com/questions/286004/hidden-features-of-modrewrite
            KP
              • 25678
              • 36 Posts
              No, it hasn’t changed since my original post. Why do you ask?

              Thank you for that link. I looked over that article and tried to implement the 301 redirect command it recommends, but it still doesn’t work. Where exactly should I place it?
                • 25678
                • 36 Posts
                I edited my .htaccess to look like this:

                # 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
                RewriteRule ^body-form-female-f5.php$ /body-form-02.php [R=301] # 301 Redirect
                
                
                #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


                Unfortunately, it still doesn’t work. What am I doing wrong?

                Thanks,

                RC
                  • 36678
                  • 152 Posts
                  The code is
                  RewriteRule old.html http://www.site.com/new.html [L,NC,R=301]
                  grin
                    Multylingo 1.0 alpha (snippet + plugin) - For creation a full-featured multilingual site with MODx Evo
                    My sites:
                    Мисли, интересни мисли
                  • I think I had better luck when I did my redirects WITHOUT friendly URLs... e.g. use the index.php?id=xx type of url, then put that before the friendly url section.
                      • 36693
                      • 66 Posts
                      I just spent ages trying to work this out... it turned out that my browser had cached the redirect. I only worked that out once I’d renamed my htaccess file to remove it and the problem continued. I guess that makes sense with 301/302 redirects in at least the short term.