RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L]
Ihre Rückreferenzierungen $1
und $2
beziehen sich eigentlich auf nichts, so dass diese immer leer (was zu leeren URL-Parameter) sein wird. $n
Rückverweise beziehen sich jedoch auf die RewriteRule
Muster, die sowieso nicht mit der Abfragezeichenfolge übereinstimmt. Sie benötigen %n
Typ Rückverweise, die auf die letzte übereinstimmende CondPattern in einer vorhergehenden RewriteCond
Richtlinie verweisen.
Dies sieht auch wie es idealerweise eine umleiten, anstatt eine interne Rewrite sein sollte? Andernfalls laufen Sie das Risiko von doppelten Inhalt.
http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars
Sie können die entsprechenden Zeichen so etwas wie die folgenden tun, um die oben genannte URL übereinstimmen und ersetzen:
RewriteCond %{QUERY_STRING} ^(sort-by=.*)%26(listing_types)%3D(.*)
RewriteRule ^(dir/)$ /$1?%1&%2=%3 [R,L]
Die oben vorübergehend würde (302) /dir/?sort-by=<anything1>%26listing_types%3D<anything2>
zu /dir/?sort-by=<anything1>&listing_types=<anything2>
umleiten. Ändern Sie R
zu R=301
, wenn dies dauerhaft sein sollte, aber nur wenn Sie bestätigt haben, dass es funktioniert.
$1
ist ein Rückverweis auf die erfassten Gruppe im RewriteRule
Muster (dh. „Dir /“) und %1
, %2
und %3
sind Rückreferenzierungen zu den entsprechenden erfassten Gruppen in der vorhergehenden CondPattern, um das zu rekonstruieren Abfragezeichenfolge
Wenn Sie müssen dies speziell entfernt dann die Flagge eine R
interne Rewrite sein (und optional den Schrägstrich-Präfix auf die Substitution entfernen). ganz in Ihrem serverseitigen Code
http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars
Wie in den Kommentaren erwähnt, könnten Sie dies stattdessen behandeln.Zum Beispiel in PHP können Sie so etwas wie:
<?php
$queryString = urldecode($_SERVER['QUERY_STRING']);
parse_str($queryString,$urlParams);
print_r($urlParams);
?>
die obige URL In Anbetracht dieser Wille Ausgabe:
Array
(
[sort-by] => title
[listing_types] => cars
)
Warum wollen Sie das tun? Es kann nur in 'title & listing_types = cars' decodiert werden – anubhava
urldecode funktioniert nicht –
' echo urldecode ('title & listing_types = autos') 'gibt mir: ' title & listing_types = cars' – anubhava