WordPress.org

Ready to get started?Download WordPress

Forums

wp_redirect with 404 status returns white page (8 posts)

  1. arnalyse
    Member
    Posted 3 years ago #

    Hi you guys,

    I put the following code in the 404.php of my theme:

    <?php
    wp_redirect( "http://www.myredirecturl.com", 404 );
    exit;

    WordPress returns a white screen in this case.
    If I use another status code like 301 or 302, the problem doesn't exist.

    I'm aware that I can define ErrorDocuments in my .htaccess, but would like to let my WordPress multisite installation handle this itself.
    (Btw: I also tried this with a WP single blog installation – same problem here)

  2. aaslun
    Member
    Posted 3 years ago #

    I have the exact same problem.
    This works however since my theme has a 404.php page:
    wp_redirect(home_url('404.php'), 302); exit;

    But i want to set http-status to 404, like so:
    wp_redirect(home_url('404.php'), 404); exit;

    What am i missing here?

  3. aaslun
    Member
    Posted 3 years ago #

    I just solved it by using $wp_query:

    if(isset($imported_post)){
            wp_redirect($post_link, 301); exit;
        }
        else{ // No match, generate 404
            global $wp_query;
            $wp_query->is_404 = true;

    Hope this helps!

  4. Chip Bennett
    Theme Review Admin
    Posted 3 years ago #

    I'm not terribly familiar with the wp_redirect() function, but at first glance, it appears that by passing it the 404 error code, you're sending it into a recursive loop: if 404, redirect to some URL, with status "404" - which the server will recognize as a 404, and cause it to invoke the WordPress 404 template - which redirects to some URL, with the status "404"...

    Question: if it works when you pass a 301 or 302 status, why not use one of those? Why are you trying to pass it a 404 error?

  5. aaslun
    Member
    Posted 3 years ago #

    Thanks for your reply Chip!
    Good to get your input about the recursive loop!
    I'm currently working with migrating a large website to WordPress. This means importing lots of posts which will all get new URIs. This site has been around for awhile and there are probably a lot of old bookmarks out there. I need to pass any request containing a broken links to a 404 (since the post doesn't exist in these cases), also Google will index broken links incorrectly if these will be 301 or 302.
    But $wp_query->is_404 = true; does the job just fine for me.

  6. Chip Bennett
    Theme Review Admin
    Posted 3 years ago #

    the wp_redirect() function is expecting a redirect status (i.e. "301" or "302").

    The "404" status has already been passed, otherwise you'd never have your 404.php page served, and wp_redirect() would never get called.

  7. aaslun
    Member
    Posted 3 years ago #

    True.

  8. arnalyse
    Member
    Posted 3 years ago #

    Thanks to all of you for the answers,
    now I'm a little bit wiser :)

Topic Closed

This topic has been closed to new replies.

About this Topic