11

I have multi-site wordpress, I want to redirect the main site to one of the sub-site but redirection in .htacecss gives error. Is there any way to redirect a main site to its sub-site. That looks not possible but I am not a wordpress expert so just verifying.

The redirect should be like

redirect 301 www.example.com/main-site www.example.com/main-site/sub-site

Or if there is any other way to do that?

4 Answers 4

10
+50

You can use the parse_request action to accomplish this. Simply enable this plugin on your primary blog. Place the following code in a .php file and upload it to your plugins directory.

/*
Plugin Name: Redirect Main Site To Sub-Site
Description: Redirect 'main-site' to 'main-site/sub-site/'
Version: 0.1
Author: WPSE
Author URI: http://wordpress.stackexchange.com
License: GPL2
*/

add_action('parse_request', 'redirect_to_sub_site');
function redirect_to_sub_site(){
    global $wp;

    #Sniff requests for a specific slug
    if('main-site' === $wp->request){

        #The URL to redirect TO
        $url = 'http://www.example.com/main-site/sub-site/';

        #Let WordPress handle the redirect - the second parameter is obviously the status
        wp_redirect($url, 301);

        #It's important to exit, otherwise wp_redirect won't work properly
        exit;
    }
}

Let me know if you have any questions.

6
  • +1 And here's it again as nice two liner ;)
    – kaiser
    Commented Sep 27, 2012 at 0:49
  • 1
    @Toqeer You should Award the bounty. Won't get it back anway. ;)
    – kaiser
    Commented Sep 27, 2012 at 19:50
  • Just awarded, I thought it will be automatically awarded :)
    – Toqeer
    Commented Sep 28, 2012 at 6:16
  • I tried now with the latest WordPress version but it is not working. Do you have any idea?
    – User
    Commented Jul 29, 2015 at 9:57
  • 1
    I found a solution for that, instead of checking the $wp->request, just check with the function is_main_site(); Commented May 26, 2016 at 14:43
3

It appears that the $wp->request that suggested in the above reply is always an empty string (in WPMS 4.5.2), so instead you can check this against is_main_site();.

2

The accepted answer is not working for Wordpress 4.9.8. Here is the updated and tested code. Put this inside function.php of the active theme.

<?php
function wpse66115_redirect_to_sub_site() {
  if ( is_main_site() ) {
    exit( wp_redirect( 'http://www.example.com/main-site/sub-site/', 301 ) );
  }
}
add_action( 'parse_request', 'wpse66115_redirect_to_sub_site' );
?>
0

The updated and tested code is neither working in 5.3. I found a solution by changing .htaccess:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.