2017-07-24 5 views
1

Ich brauche den Charakter %26 für & und %3D für = in meiner URL zu ersetzen:Wie auf .htaccess umschreiben

http://www.example.com/dir/?sort-by=title%26listing_types%3Dcars 

ich das Umschreiben von unten versucht, aber es nicht

RewriteRule ^dir/?$ ?sort-by=$1&listing-types=$2 [QSA,L] 

funktioniert Hilfe ist willkommen

+1

Warum wollen Sie das tun? Es kann nur in 'title & listing_types = cars' decodiert werden – anubhava

+0

urldecode funktioniert nicht –

+0

' echo urldecode ('title & listing_types = autos') 'gibt mir: ' title & listing_types = cars' – anubhava

Antwort

0
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 RewriteRuleMuster, 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 RewriteRuleMuster (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 Rinterne 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 
)