X-Cart: shopping cart software

X-Cart forums (https://forum.x-cart.com/index.php)
-   Dev Questions (https://forum.x-cart.com/forumdisplay.php?f=20)
-   -   301 Redirect deleted product to new page instead of 404 (https://forum.x-cart.com/showthread.php?t=68698)

elmirage001 02-20-2014 09:36 PM

301 Redirect deleted product to new page instead of 404
 
A user asked this question in another thread and instead of hijacking it I'm starting this one. I'm posting the edit here in hopes that other will chime in and let us know if there is a better way.

I will be using a more involved version of this that will 301 for certain filtered URLs and 404 everything else. I'm not sure if this is the best way to accomplish this or not but using a server response checker everything is working okay.

I know that it's best to not delete product but we have a unique business that specializes in products that are "one of a kind" and when it's sold it can't be replaced so you have to upload a new product of the same group. The reality is that to keep your sanity you must delete sold items from time to time.

In include/func/func.core.php around line 3133

Change:
Code:

if ($HTTPS)
        $base_replacement = '<base href="https://' . $xcart_https_host . $xcart_web_dir . '/"';
    else
        $base_replacement = '<base href="http://' . $xcart_http_host . $xcart_web_dir . '/"';

    @header("HTTP/1.0 404 Not Found");

    if ($is_found) {
        echo preg_replace('/<base\s+href=".*"/USs', $base_replacement , implode("", file($filename404)));
    }

    exit;
}

To:
Code:

if ($HTTPS)
        $base_replacement = '<base href="https://' . $xcart_https_host . $xcart_web_dir . '/"';
    else
        $base_replacement = '<base href="http://' . $xcart_http_host . $xcart_web_dir . '/"';

    //@header("HTTP/1.0 404 Not Found");

    //if ($is_found) {
    //    echo preg_replace('/<base\s+href=".*"/USs', $base_replacement , implode("", file($filename404)));
    //}
       
    @header("HTTP/1.1 301 Moved Permanently");
    @header("Location: http://www.your_url.com/");
       
    exit;
}

Thank you, Paul

cflsystems 02-20-2014 10:00 PM

Re: 301 Redirect deleted product to new page instead of 404
 
If this is for products only probably better to do it here

func.product.php around line 2430 if product is not found or disabled

PHP Code:

func_403(33);
            } else {
                
func_page_not_found();
            }
        } else {
            return 
false;
        } 


replace the one you need with

func_header_location($location, true, 301, true, false);

Replace $location with where you want it to go like 'home.php', or 'home.php?cat=XX', or static page...

This func_select_product is called by product.php. Keep in mind though that same function is probably called on other occasions to list products so probably best to replace the func_403 or func_page_not_found with the new code and leave the "return false" as is

elmirage001 02-20-2014 10:06 PM

Re: 301 Redirect deleted product to new page instead of 404
 
Hi Steve,

That's excellent! I was hoping you'd show me a better way. :-)
As always I'm very appreciative of your help! Paul

cflsystems 02-20-2014 10:35 PM

Re: 301 Redirect deleted product to new page instead of 404
 
No problem


All times are GMT -8. The time now is 07:03 PM.

Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.