0

Once again struggling with htaccess. I've successfully redirected the home page to my holding page with the following rule but it's not applying to child pages for some reason (mydomain.com/child-page).

# MAINTENANCE-PAGE REDIRECT
<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REQUEST_URI} !/holding [NC]
 RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|eot|svg|ttf|woff|css) [NC]
 RewriteRule ^(.*)$ /holding [R=302,L]
</IfModule>

What am I doing wrong? I know it must be to do with the '^(.*)$' bit but I can;t seem to find the correct syntax.

2 Answers 2

0

I would place the redirect inside WordPress. It lends you more control, and you don't need to worry about WP conflicting with your own .htaccess rewrites anymore.

function wpse_147377_redirect_to_holding() {
    if ( ! is_page( 'holding' ) ) {
         wp_redirect( site_url( 'holding' ) );
         exit;
    }
}

add_action( 'template_redirect', 'wpse_147377_redirect_to_holding' );

Place it in a "Must Use" plugin (wp-content/mu-plugins/my-plugin.php), a regular plugin, or your theme's functions.php.

2
  • I'm not sure about this one @TheDeadMedic: it creates a redirect loop when I use it. Should it take that condition into account automatically? Thanks. Jun 3, 2014 at 10:49
  • Ah, I assumed your holding page was outside WP - you're right, just add if ( ! is_page( 'holding' ) ) and change the hook to template_redirect (see edit). Jun 3, 2014 at 16:08
0

Okay, thanks for pointing me in the right direction @TheDeadMedic. I found a tidy conditional on this thread which works like a charm with the added benefit of checking to see if the user is logged in.

if ( trim( $_SERVER['REQUEST_URI'], '/' ) != 'holding' && ! is_user_logged_in() ) {
    wp_redirect( home_url( 'holding' ), 302 );
    exit;
}

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.