2017-02-13 4 views
-1

Ich habe eine URL und möchte auf eine absolute URL umleiten. Folgendes funktioniert bei mir nicht:.htaccess Regel für 301 umleiten auf absolute URL

Redirect 301 /changecurrency/3?returnurl=/9ct-gold-belcher-chain-tg40dc http://www.example.com/9ct-gold-belcher-chain-tg40dc 

Was ist daran falsch?

+0

Die HTTP-Get-Parameter sind _nicht_ Teil der URL. Wenn Sie genau diese Anfrage abgleichen müssen (mit genau den get Parametern), dann müssen Sie ein 'Rewriteond' verwenden, das vom Überschreibungsmodul angeboten wird. – arkascha

+0

Vielen Dank @arkascha – Owen

Antwort

1

Die HTTP-Get-Parameter sind nicht Teil der URL. Wenn Sie genau übereinstimmen müssen diesen Antrag versuchen Sie (mit genau diejenigen Parameter bekommen), dann müssen Sie eine Rewriteond s durch das Umschreiben Modul angeboten verwenden:

RewriteEngine on 
RewriteCond %{QUERY_STRING} returnurl=/9ct-gold-belcher-chain-tg40dc 
RewriteRule ^/?changecurrency/3 http://www.example.com/9ct-gold-belcher-chain-tg40dc [END,R=301,QSD] 

Die obige Regel in der http-Server-Host-Konfiguration arbeiten und auch in dynamischen Konfigurationsdateien (.htaccess).

Offensichtlich muss das Rewriting-Modul in den HTTP-Server geladen werden.

Wenn Sie eine wirklich alte Version des Apache http-Servers verwenden, müssen Sie möglicherweise das END Flag durch das Flag L ersetzen.

Und ein allgemeiner Hinweis: Sie sollten solche Regeln immer lieber in der Host-Konfiguration des http-Servers platzieren, anstatt dynamische Konfigurationsdateien (".htaccess") zu verwenden. Diese Dateien sind notorisch fehleranfällig, schwer zu debuggen und verlangsamen den Server wirklich. Sie werden nur als letzte Option für Situationen angeboten, in denen Sie keine Kontrolle über die Host-Konfiguration haben (lesen Sie: wirklich günstige Hosting-Service-Provider) oder wenn Sie eine Anwendung haben, die eigene Schreibregeln schreibt (was ein offensichtlicher Sicherheitsalarm ist)).

+0

Schöne Antwort +1, aber ich denke nicht, dass Sie END für externe Umleitung verwenden sollten. – starkeen

+0

@starkeen Immer bereit zu lernen ... würdest du gerne etwas ausarbeiten? – arkascha

+0

Das END-Flag wird hauptsächlich mit internen rewriteRules verwendet, um die Verarbeitung der Regel zu beenden. Es hat nichts mit einer externen Anfrage zu tun, wie in Ihrem Beispiel. – starkeen