RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
Perché RewriteRule guarda solo al percorso (fino a, ma non incluso il punto di domanda), utilizzare RewriteCond per catturare i valori nella stringa di query.
noti che le partite da RewriteCond
vengono acquisite in %1
, %2
, ecc, piuttosto che $1
, $2
, ecc
notare anche le ?
a fine RewriteRule
. Indica a mod_rewrite di non aggiungere la stringa di query originale al nuovo URL, quindi si finisce con /DesignPatterns/151
di /DesignPatterns/151?book=DesignPatterns&page=151
.
I [L,R=301]
bandiere fare due cose:
L
assicura che nessun altre regole che altrimenti potrebbero corrispondere saranno trattati (in altre parole, assicura questa è la "ultima" regola trasformati).
R=301
fa in modo che il server invii una risposta di reindirizzamento. Invece di riscrivere, dice al client di provare di nuovo con il nuovo URL . Il =301
lo rende un permanent redirect, così che, tra le altre cose, i motori di ricerca sapranno sostituire il vecchio URL con il nuovo URL nei loro indici.
fonte
2010-02-12 14:01:45
+1 Mi piace quando viene fornita una spiegazione completa con una risposta –
Probabilmente vuoi anche il flag [L] quando hai più regole di riscrittura. Il flag [L] interrompe l'elaborazione dopo che la regola è stata abbinata e il flag [R] NON lo include implicitamente. – TheJosh
I $ vs% mi stavano uccidendo. Non ne avevo idea. Grazie! – keithwyland