2016-05-03 24 views
0

Ich versuche, eine URL mit mehreren Querystring-Parameter in eine Ordnerstruktur URL und bekomme einen 500 internen Server-Fehler.interner Server Fehler mit htaccess Rewrite-Regel

Meine eingehende URL sieht aus wie www.fivestarprofessional.com/ag?PY=16&PF=wm&MKT=Delaware

Mein Ziel-URL ich geschrieben brauchen als delaware.fivestarprofessional.com/16/wm/index.html

Ich habe 3 RewriteCond Aussagen, die Parameter und eine RewriteRule zur Erfassung der Ausgangs

RewriteCond %{QUERY_STRING} !^(PY=.*)$ [NC] 
RewriteCond %{QUERY_STRING} !^(PF=.*)$ [NC] 
RewriteCond %{QUERY_STRING} !^(MKT=.*)$ [NC] 
RewriteRule %3.fivestarprofessional.com/%1/%2/index.html 
zu erstellen

Jede Hilfe würde sehr geschätzt werden.

+1

sehen, was die Protokolle –

+0

Ihre Regel zu sagen haben, ist gebrochen und voller Syntex-Fehler. Wo hast du es her? – starkeen

Antwort

0

Versuchen Sie dieses:

RewriteCond "%{QUERY_STRING}" "^PY=([^&]+).*&PF=([^&]+).*&MKT=([^&]+)" [NC] 
RewriteRule "www.fivestarprofessional.com/ag" "%3.fivestarprofessional.com/%1/%2/index.html" 

Die folgenden Probleme wurden behoben:

  • RewriteRule dauert 3 Argumente statt 2.

  • Argumente zu RewriteCond war nicht eingeschlossen worden in Anführungszeichen.

  • Die Rückreferenzierungen in die RewriteCond rules ...

    • ... nur auf die letzte Bedingung beziehen abgestimmt (spitz durch @anubhava out, in der Apache httpd-Dokumente dokumentiert). Daher müssen die Regeln in einem zusammengefasst werden.
    • ... auf den Namen Parameter bezeichnet und den gesamten Rest der Abfrage-String
    • ... würde mit dem jeweiligen ul Parameter auf die Verwendung des ^ Anker gelegen haben abgestimmt gegen Query-String beginnen.
    • ... wäre leer ohnehin gewesen, da die Regeln ausgelöst, wenn die Muster nicht (Verwendung von ! Präfix) brachte

Empfohlene Lektüre ist der richtige Abschnitt des apache httpd documentation.

Die Lösung, wie es steht davon aus, dass ...

  • der Query-String beginnt mit dem URL-Parameter PY

  • die Reihenfolge, in der die URL-Parameter PY, PF, erscheinen MKT in der Abfragezeichenfolge ist behoben.

+0

Nach dem Anhängen von [R = 301, L] funktioniert die Rewrite-Regel jetzt –

+0

vollständige Zeichenfolge: RewriteCond "% {QUERY_STRING}" "^ PY = ([^ &] +). * & PF = ([^ &] +) . * & MKT = ([^ &] +) "[NC] RewriteRule"/ag "" http: //%3.fivestarprofessional.com/%1/%2/index.html "[R = 301, L] –

2

Sie können diese Regel für die Umleitung verwenden:

RewriteCond %{QUERY_STRING} (?:^|&)PY=([^&]+) [NC] 
RewriteCond %1::%{QUERY_STRING} (.*?)::(?:|.*&)PF=([^&]+) [NC] 
RewriteCond %1/%2::%{QUERY_STRING} (.*?)::(?:|.*&)MKT=([^&]+) 
RewriteRule ^ag/?$ http://%2.fivestarprofessional.com/%1/index.html? [L,NC,NE,R=302] 

% Variablen nur aus der letzten Bedingung erfasst werden unter Verwendung derselben %{QUERY_STRING}

+0

ist es nicht möglich, den gesamten Abfrage-String in 1 RewriteCond? :) – starkeen

+0

Wenn Anforderung ist, dass Abfrage-Parameter in beliebiger Reihenfolge angezeigt werden können, dann ist es nicht möglich, sie in einzelne "RewriteCond" – anubhava

+0

Ich bin es testen jetzt, ich glaube, ich habe einen weiteren Konflikt in meiner Htaccess-Datei, die die Parameter ausstreift, wie ich auf meine Homepage umgeleitet werde. –