2017-05-04 2 views
1

Hallo Leute, ich habe ein Problem mit Redirects. Ich versuche, machen einen 301

www.example.com/? to www.example.com/ 

und auch301 Umleitung "/?" und "/? i = xxx" bis "/"

www.example.com/?i=xxxx to www.example.com/ 

Mit diesem Code:

RewriteEngine On 
RewriteBase/
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$ https://www.example.com/ [R=301,L] 

oder mit diesem

RewriteEngine On 
RewriteBase/
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$/R=301,L] 

aber weiterhin die i=xxx hinzufügen wenn ich auf die neue Website weiterleite ..

.

Ich möchte

  • /? zu /
  • /?i=xx zu /

Antwort

1
RewriteRule ^$ https://www.example.com/ [R=301,L] 

Sie müssen umleiten ein ? auf das Ende deshinzufügenErsetzung (effektiv eine leere Abfragezeichenfolge). Andernfalls, wenn Sie keine Abfragezeichenfolge angeben, kopiert Apache automatisch die Abfragezeichenfolge aus der Anfrage. Die einzelne ? wird nicht auf dem Ziel angezeigt - die Abfragezeichenfolge wird vollständig entfernt. Zum Beispiel:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$ https://www.example.com/? [R=301,L] 

Die RewriteBase Richtlinie ist hier nicht erforderlich, da Sie nicht relativ Substitutionen verwenden.

Hinweis: Wenn Sie WordPress verwenden, sollten Sie (.*) zu [0-9]+ ändern, da sonst einige interne Funktionen wie die Vorschau eines Beitrags unterbrochen werden können. Referenz: https://xeedbeam.me/prevenir-contenido-duplicado-en-wordpress-con-htaccess-para-seo-parte-1/

Oder - Alternativ können Sie bei Apache 2.4+ stattdessen das Flag QSD (Query String Discard) verwenden.

RewriteRule ^$ https://www.example.com/ [QSD,R=301,L] 

Sie müssen den Browser-Cache vor dem Testen leeren.

UPDATE:

I /? zu /

Dies ist ein wenig komplizierter umleiten möchten, wie Sie nicht bestimmen können (nur mit dem QUERY_STRING Variable), ob die Query-String ist völlig abwesend (dh. no ?) oder einfach leer (mit ? aber nichts danach). Sie können jedoch die Servervariable THE_REQUEST überprüfen, die den eigentlichen Anforderungsheader enthält (z. B. "GET /? HTTP/1.1").Zum Beispiel:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^GET\s/\?\sHTTP 
RewriteRule ^$ /? [R=301,L] 

Allerdings wäre dies für Suchmaschinen kein Problem. example.com/ und example.com/?sollte gleich behandelt werden.