2016-05-01 11 views
0

Versucht, eine einfache. Htaccess Redirect implementieren keine dieser Arbeit, keine Ahnung, wie zu beheben?einfache htaccess RewriteRule oder Redirect funktioniert nicht richtig

RewriteRule ^/en/?productsublayout=products_horizon http://www.example.com/en/ [R=302,L] 

Redirect 301 /en/?productsublayout=products_horizon http://www.example.com/en/ 
+0

versuchen Sie dies: http://serverfault.com/questions/773999/htaccess-301-redirect-does-not-work – starkeen

Antwort

1

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.