lesen the documentation of mod_rewrite, wie Ihr Code hat zwei gemeinsame Probleme, die beiden, die bereits im documenation angesprochen wurden.
Per-Verzeichnis Neuschreiben
[..]
- Der entfernte Präfix endet immer mit einem Schrägstrich, also die Anpassung einer Schnur tritt gegen die nie einen führenden Schrägstrich hat. Daher stimmt ein Muster mit
^/
nie im Kontext pro Verzeichnis überein.
und
Wenn Sie gegen den Hostnamen, Port oder Query-String übereinstimmen, verwenden Sie einen RewriteCond mit den %{HTTP_HOST}
, %{SERVER_PORT}
oder %{QUERY_STRING}
Variablen sind.
Denken Sie außerdem daran, dass das erste Argument von RewriteRule
eine Regex ist. Das Zeichen ?
hat in einer Regex eine besondere Bedeutung.
Sie haben es so zu korrigieren:
RewriteCond %{QUERY_STRING} ^productsublayout=products_horizon$
RewriteRule ^en/$ /en/? [R=302,L]
Alternativ, wenn Sie eine aktuelle Version von Apache haben, verwenden Sie die QSD
Flag anstelle eines Hinter ?
hinter dem Rewrite-Teil.
versuchen Sie dies: http://serverfault.com/questions/773999/htaccess-301-redirect-does-not-work – starkeen