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.