RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
Da RewriteRule sieht nur auf dem Weg (bis zu, aber das Fragezeichen nicht einschließlich), verwenden RewriteCond die Werte in dem Abfrage-String zu erfassen.
Beachten Sie, dass die Spiele von RewriteCond
in %1
erfasst werden, %2
usw., anstatt $1
, $2
usw.
beachten Sie auch die ?
am Ende RewriteRule
. Er teilt mod_rewrite mit, dass die ursprüngliche Abfragezeichenfolge nicht an die neue URL angehängt werden soll. Sie erhalten also /DesignPatterns/151
intead von /DesignPatterns/151?book=DesignPatterns&page=151
.
Die [L,R=301]
Fahnen zwei Dinge tun:
L
stellt sicher, dass keine anderen Regeln, die auf andere Weise bearbeitet werden könnten übereinstimmen (mit anderen Worten, es wird sichergestellt, das die „letzte“ Regel verarbeitet ist).
R=301
bewirkt, dass der Server eine Weiterleitungsantwort zurücksendet. Anstatt das Programm erneut zu schreiben, wird der Client aufgefordert, es erneut mit der neuen URL zu versuchen. Die =301
macht es zu einem permanent redirect, so dass Suchmaschinen unter anderem wissen, die alte URL durch die neue URL in ihren Indizes zu ersetzen.
+1 Ich liebe es, wenn eine vollständige Erklärung mit einer Antwort gegeben wird –
Sie möchten wahrscheinlich auch das [L] -Flag, wenn Sie mehrere Umschreibungsregeln haben. Das Flag [L] stoppt die Verarbeitung, nachdem die Regel abgeglichen wurde, und das Flag [R] schließt es NICHT implizit ein. – TheJosh
Die $ vs% brachten mich um. Ich hatte keine Ahnung. Vielen Dank! – keithwyland