Support » Networking WordPress » Redirect old URL with .htaccess?

  • There are many old links in the internet to our homepage. This links follow on a path structure form the former CMS. Now we like to redirect some of the most important old URLs to the new path.
    So fare no problem, if the old URLs wouldn’t include /index.php?... It conflicts with WP rewrite rule in .htaccess.

    E.g: http://www.domain.com/index.php?task=listcats&cat_id=99&Itemid=52&option=com_mtree should redirect to https://www.domain.com/information/about-us/

    We like to send a 301 status code as well.

    How can I create a rewrite rules/redirects in .htaccess, without disturb the existing rewrite rules of WP and other existing?

    The existing and well working .htaccess looks like:

    `# enforce https
    <IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTPS} =off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

    </IfModule>

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    # END WordPress

    # deny acces to /xmlrpc.php
    <Files xmlrpc.php>
    Order allow,deny
    Deny from all
    </Files>`

Viewing 7 replies - 1 through 7 (of 7 total)
  • try this (1 line, put at the top of .htaccess file)

    Redirect 301 index.php?task=listcats&cat_id=99&Itemid=52&option=com_mtree https://www.domain.com/information/about-us/

    Thread Starter thomei

    (@thomei)

    try this (1 line, put at the top of .htaccess file)

    Redirect 301 index.php?task=listcats&cat_id=99&Itemid=52&option=com_mtree https://www.domain.com/information/about-us/

    It doesn’t disturb WP, but doesn’t redirect to https://www.domain.com/information/about-us/. Not working.

    # enforce https
    <IfModule mod_rewrite.c>
    RewriteEngine On
    
    RewriteCond %{HTTPS} =off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    RewriteCond %{REQUEST_URI} ^/index.php
    RewriteCond %{QUERY_STRING} task=listcats&cat_id=99&Itemid=52&option=com_mtree
    RewriteRule ^ "/information/about-us/?" [R=301,L]
    
    </IfModule>
    
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    
    # deny acces to /xmlrpc.php
    <Files xmlrpc.php>
    Order allow,deny
    Deny from all
    </Files>

    I removed the QSA flag because the REQUEST_URI variable should contain the query string. If it is http I take it in https, if it is on the index.php file and with the right query string then I transform it into another url with loss of query string. If you use APACHE => 2.4 instead of the question mark enter the flag QSD.

    • This reply was modified 1 year, 7 months ago by autotutorial.
    Thread Starter thomei

    (@thomei)

    Thank you very much @autotutorial ! It works. But it causes a new problem:

    http://www.domain.com/index.php?task=listcats&cat_id=99&Itemid=52&option=com_mtreeredirects now to https://www.domain.com/information/about-us/. I’m also able to redirect other old URLs to the new path.

    But it causes a new issue:
    All old URLs used to redirect to / or http://www.domain.com/
    Now, all not in .htaccess included old URLs are a 404-Error.

    How to redirect all http://www.domain.com/index.php?.... URLs to / expect the one we redirect to a new goal and WP-paths or other files?

    • This reply was modified 1 year, 7 months ago by thomei.

    But it causes a new issue:
    All old URLs used to redirect to / or http://www.domain.com/
    Now, all not in .htaccess included old URLs are a 404-Error.

    I’m sorry for your problem.
    If you use this .haccess code https://wordpress.org/support/topic/redirect-old-url-with-htaccess/#post-12046441

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

    it means if I am in index.php I do not show this file otherwise if it is not a file nor a valid directory I go to (internally) index.php to manage this behavior, simplifying this file executes the Pretty Permalink. more info here. https://codex.wordpress.org/Rewrite_API/add_rewrite_rule.

    What code did you add to your .htaccess file? Are you using Ugly Permalink?

    Thread Starter thomei

    (@thomei)

    @cuong381
    Spam?
    You are not welcome!

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Redirect old URL with .htaccess?’ is closed to new replies.