2017-01-30 13 views
0

Ich versuche, eine hässliche URL mit Parametern in eine nette URL zu verwandeln. Im Moment habe ich:.htaccess: param url zu reinigen URL

http://myasite.com/index.php?reg=uk&area=london&id=16

Welche Ich möchte wie so haben:

http://myasite.com/uk/london/16

habe ich versucht, mit dieser .htaccess:

RewriteEngine On 
RewriteRule ^/?$/?$ index.php?reg=$1&area=london&id=$2 [L,QSA] 

Was ich von einem Online-Generator bekam, aber wenn ich die Seite mit/uk/16 in der URL starte, stürzt es einfach ab.

Was mache ich falsch?

Als Antwort auf Chris Antwort unten. Alle diese sind optional.

Struktur der URL ist wie folgt:

myasite.com 
myasite.com/uk (if set, This will always be text and always 2 chars long) 
myasite.com/uk/london (if set, This will always be text, this will be any char length) 
myasite.com/uk/london/16 (if set, This will always be integer and any char length) 
+0

Was sind akzeptable Werte für 'reg' und' id'? Id ist wahrscheinlich nur eine ganze Zahl? Was du falsch machst, ist die Regex. '/? $ /?' sagt, dass es 2 optionale '/' s geben kann, sonst nichts. – chris85

+0

@ chris85 Ich machte einen kleinen Fehler beim Schreiben meiner q - Bitte siehe neuen Beitrag – JamesG

+0

@ chris85 yup ich dachte, so viel. aber ich bin ehrlich gesagt ein bisschen über meinen Kopf damit. Ich bin mir nicht sicher, was ich mache.Ich brauche alle drei, um zu arbeiten, aber auch nicht zu stürzen, wenn man nicht gesetzt ist. Kannst du helfen? – JamesG

Antwort

-1
RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/?$ index.php?reg=$1&id=$2 [L,QSA] 

Wir Umschreiben $1/$2/ und $1/$2 zu index.php?reg=$1&id=$2

+0

Wer auch immer die -1 gemacht hat, bitte kommentieren! – Prakash

+0

Danke, ich werde es versuchen – JamesG

0

Ihre regex nicht korrekt ist. Ihre ^/?$/?$ sagt, die Anfrage kann nur 2 / s haben, jeder ist optional. Sie verwenden auch keine Erfassungsgruppen, daher haben $1 und $2 keinen Kontext. Hier ist ein regulärer Ausdruck, die für Ihr bereitgestellt Beispiel funktionieren würde:

^/(uk)/(\d+)$ 

Wenn uk kann alle zwei Kleinbuchstaben Sie konnten verwenden:

^/([a-z]{2})/(\d+)$ 

können Sie regex101 verwenden, um zu sehen, wie Ihr regexs funktioniert.

https://regex101.com/r/VyJE9d/1 (die Regel)
https://regex101.com/r/VyJE9d/2

Die rechte Seite der Seite gibt Erklärungen.

Als Rewrite-Regel:

RewriteEngine On 
RewriteRule ^/([a-z]{2})/(\d+)$ index.php?reg=$1&id=$2 [L,QSA] 
+0

siehe bearbeiten. :) – JamesG

+0

Pro Update müssen Sie 3 Regeln haben. Bitte benutzen Sie den Regex101 Link und wenn Sie Fragen zu den Regexs haben, fragen Sie. – chris85

+0

Hier ist ein potenzieller Regex für die erste Regel, https://regex101.com/r/VyJE9d/3. – chris85

0

Alles, was Sie verwenden müssen, ist dies in Ihrer .htaccess Datei: http://myasite.com/uk/london/16:

RewriteEngine On 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?reg=$1&area=$2&id=$3 [L] 

Diese Sie mit Ihrem gewünschten URL verlassen wird. Stellen Sie sicher, dass Sie Ihren Cache löschen, bevor Sie dies testen.