Reindirizzare a un URL Riscritto
-
22-10-2019 - |
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.
beneQuesta 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
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)