Domanda

OK, quindi sto riscrivendo alcuni URL della pagina per un carrello PHP personalizzato.

devo le seguenti regole:

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

Questi mi consentirà di utilizzare una struttura di URL come example.com/product/23/product-slug.

bene

Questa parte funziona. Mi chiedo che cosa le opzioni che ho per l'altra direzione; reindirizzando le richieste per l'URL vecchio per il nuovo URL. Così, per esempio, quando qualcuno va a /product.php?id=2 voglio reindirizzare a / prodotti / 2 / slug.

Qualsiasi idea di come ottenere questo fatto?

Ho provato un semplice redirect, ma non funzionerebbe:

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

Soluzione 2

Ho risolto questo un modo diverso: con una modifica al file store.php

.

ho guardato uscita dal print_r($_SERVER) dopo il ping entrambi gli URL normali e riscritti. Ho scoperto che $_SERVER['SCRIPT_URL'] contiene "/store.php" quando l'URL normale viene colpito e contiene il mio percorso riscritta quando l'URL riscritto è successo.

Questo significa che può fare un semplice test e reindirizzare in modo appropriato:

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

Altri suggerimenti

Redirect richiede solo un URL prefisso, non un'espressione regolare (ad esempio /store.php o / store)

È necessario cercare RedirectMatch:

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

Inoltre, si è dovuto iniziare con una /? Non sono sicuro (le voci RewriteRule sopra inizio senza barra, per esempio)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top