RewriteRule in .htaccess entspricht der ersten Instanz der Zeichenfolge, jedoch nicht der vollständigen Zeichenfolge

Jun 12 2020

Ich verwende RewriteRule in meinem .htaccess, um 301 Weiterleitungen auf meiner Wordpress-Website durchzuführen. Ich habe festgestellt, dass eine RewriteRule, die den gleichen Text wie eine andere Regel fortsetzt, immer mit der ersten Regel übereinstimmt. Wie kann ich das beheben, damit es nur mit der vollständigen Zeichenfolge übereinstimmt?

Erste Regel, die funktioniert: RewriteRule ^/?ulock https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC]

Zweite Regel, die immer zum falschen Beitrag geht (der oben genannte): RewriteRule ^/?ulockbracket https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]

Antworten

1 anubhava Jun 13 2020 at 05:06

Wenn Sie die Regel haben als:

RewriteRule ^/?ulock ...
RewriteRule ^/?ulockbracket ...

Dann stimmt das erste Muster mit jedem URI überein, der beginnt und mit /ulockdem auch übereinstimmt, /ulockbracketdaher wird die zweite Regel nicht ausgelöst.

Die Lösung besteht darin, Regex-Anker zu verwenden, um sicherzustellen, dass wir eine genaue Übereinstimmung verwenden:

RewriteRule ^/?ulock/?$ https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC] RewriteRule ^/?ulockbracket/?$ https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]

oder verwenden Sie ein längeres Übereinstimmungsmuster vor einem kürzeren Übereinstimmungsmuster:

RewriteRule ^/?ulockbracket https://biketoeverything.com/2018/04/24/attach-any-u-lock-to-your-bike/ [L,R=301,NC]
RewriteRule ^/?ulock https://biketoeverything.com/2018/06/18/the-u-lock-to-buy/ [L,R=301,NC]