Seite 1 von 1

Sonderzeichen mit mod_rewrite an QUERY_STRING übergeben

Verfasst: 09.11.2009, 19:53
von whobee
Hallo Leute,

ich möchte URLs für eine Suchfunktion aufbauen und hatte mir etwas in dieser Form vorgestellt:
www.meine-dom.de/meine-suche/<suchphrase>/

Habs mit folgender Regel versucht:
RewriteRule ^/meine-suche/(.*)/$ /mein-skriptchen.php?q=$1 [L,QSA]

.. in der Hoffung, die Suchephrase so über den QUERY_STRING auswerten zu können. Bei den Zeichen / und & gibts aber z.B. richtig Probleme!

Kann ich auf diesem Weg überhaupt alle beliebigen Zeichen übergeben und wie muss ich sie kodieren? (Base64 ist z.B. keine Option, ich will die Suchphrase im URL ja noch lesen können :-) )

Vielen Dank für eure Anregungen
whobee

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 09.11.2009, 20:46
von Seonudel
Mein Bauchgefühl sagt mir, das Du die URLs urlencoden solltest.
Wenn Du PHP nutzt schau Dir die Funktionen urlencode() und urldecode() mal an ... vielleicht hilft das ja.

Re: Sonderzeichen mit mod_rewrite an QUERY_STRING übergeben

Verfasst: 09.11.2009, 22:31
von Mork vom Ork
whobee hat geschrieben:RewriteRule ^/meine-suche/(.*)/$ /mein-skriptchen.php?q=$1 [L,QSA]

.. in der Hoffung, die Suchephrase so über den QUERY_STRING auswerten zu können.
Grundsätzlich korrekt.
Bei den Zeichen / und & gibts aber z.B. richtig Probleme!
&#8230; soll bedeuten?

Verfasst:
von

Verfasst: 10.11.2009, 00:48
von whobee
Beim Aufruf eines kodierten "&" geschieht Unerwartetes:
/meine-suche/%26
& wird von offenbar von mod_rewrite (?) decodiert. Logauszug:

Code: Alles auswählen

applying pattern '^/meine-suche/&#40;.*&#41;$' to uri '/meine-suche/&'
rewrite '/meine-suche/&' -> '/mein-skriptchen.php?q=&'
Damit ist q ist leer! Z.B. wird damit der Aufruf von
/meine-suche/Essen%26Trinken
zu
/mein-skriptchen.php?q=Essen&Trinken
Nicht so ganz, was ich erwartete, im QUERY_STRING kann man "&" urlkodiert problemlos übergeben...

Noch lustiger wird es beim Aufruf eines / :
/meine-suche/%2F
Dieser Request steht gar nicht im Rewrite-Log!
Grund:Ist die Apache-Direktive "AllowEncodedSlashes" auf "Off" (was Default ist ) dann fliegt gleich ein 404, wenn sich ein kodierter / oder \ im URL gefindet....

Bleibt die Frage: Wie gehts dennoch? (Rausfiltern? :-) )

Ich muss noch anmerken, daß ich die Rule falsch angegeben habe. Meinte:
RewriteRule ^/meine-suche/(.*)$ /mein-skriptchen.php?q=$1 [L,QSA]
Also ohne den Slash hinter der Klammer: Das ändert aber auch nichts am "Problem"...

whobee

Verfasst: 10.11.2009, 02:18
von Seonudel
Was willst Du eigentlich erreichen?
Erzeugst Du die URLs selber oder willst Du möglichst alle Problemfälle abfangen, allen Schrott den ein User eintippen könnte rausfiltern?

Hast Du das urlencode() mal getestet?

Verfasst: 10.11.2009, 08:49
von Bauchladen

Code: Alles auswählen

RewriteEngine On
RewriteRule search/&#40;.*&#41; /index.php?q=$1 &#91;L&#93;
# Geht auch mit &#91;L,NE&#93; falls notwendig

Code: Alles auswählen

<?php

header&#40;'content-type&#58; text/plain; charset="utf-8"'&#41;;
echo $_GET&#91;'q'&#93;;

?>

Code: Alles auswählen

http&#58;//www.mydom.com/search/öäüÖÄÜß/askdaskdj\


Grüße