Question

OK, so I'm rewriting some page URLs for a custom PHP cart.

I've got the following rules:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L]
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L]

These will allow me to use a url structure like example.com/product/23/product-slug.

That part is working alright. I'm wondering what options I have for the other direction; redirecting requests for the OLD url to the NEW url. So for example, when someone goes to /product.php?id=2 I want to redirect to /products/2/slug.

Any idea how to get this done?

I tried a simple redirect, but would not work:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
Was it helpful?

Solution 2

I solved this a different way: with a modification to the store.php file.

I looked at output from print_r($_SERVER) after pinging both the normal and rewritten urls. I found that $_SERVER['SCRIPT_URL'] contains "/store.php" when the normal url is hit and it contains my rewritten path when the rewritten url is hit.

This means I can do a simple test and redirect appropriately:

if ($_SERVER['SCRIPT_URL'] == "/store.php") {
    // run some code that will generate the url
    $rewrittenURL = generateURL();
    // then add:
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent
    header("Location: $rewrittenURL");
}

OTHER TIPS

Redirect only takes a url prefix, not a regex (e.g. /store.php or /store)

You need to try RedirectMatch:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug

Also, is it supposed to start with a /? I'm not sure (your RewriteRule entries above start with no slash, for example)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top