Question

OK, donc je réécriture des URL de la page pour un panier PHP personnalisé.

J'ai les règles suivantes:

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

Ceux-ci me permettra d'utiliser une structure d'URL comme example.com/product/23/product-slug.

Cette partie fonctionne bien. Je me demande quelles sont les options que j'ai pour l'autre sens; rediriger les demandes de l'URL initiale à l'url NOUVEAU. Ainsi, par exemple, quand quelqu'un va /product.php?id=2 je veux rediriger vers / produits / 2 / limaces.

Toute idée comment y parvenir?

J'ai essayé un redirect simple, mais ne travaillerait:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
Était-ce utile?

La solution 2

Je résolu ce d'une manière différente: avec une modification du fichier store.php

.

je regardais à la sortie de print_r($_SERVER) après pinger les deux urls normales et réécrites. Je trouve que $_SERVER['SCRIPT_URL'] contient « /store.php » lorsque l'URL normale est frappé et il contient mon chemin réécrite lorsque l'URL réécrite est frappé.

Cela signifie que je peut faire un test simple et rediriger correctement:

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");
}

Autres conseils

Redirect ne prend que préfixe URL, et non une expression régulière (par exemple /store.php ou / magasin)

Vous devez essayer RedirectMatch:

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

Aussi, est-il commencer avec un /? Je ne suis pas sûr (vos entrées RewriteRule ci-dessus commencent sans barre oblique, par exemple)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top