Rediriger à une URL réécrite
-
22-10-2019 - |
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
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)