Zur Navigation

Sonderzeichen in der URL mit .htaccess übergeben

Sonderzeichen in der URL mit .htaccess übergeben

1 martinm79

Hallo,

also ich suche jetzt schon seit einigen Wochen nach einer Antwort und habe immer noch keine Lösung.

Ich möchte einfach ein Nick Namen wie zum Beispiel

domain/martinm79

in

index.php?nick=martinm79

übergeben.
Das sollte kein Problem sein. Da habe ich mir das geschrieben.


RewriteRule ^([0-9|a-z|\+|\*|\.|\[|\^|\$|\(|\)]+)$ index.php?nick=$1&%{QUERY_STRING} [L,NC]

Das Problem ist aber mit den Sonderzeichen wie zum Beipiel ein Sternchen * oder ein Hochkomma ". Ich kann diese Zeichen auch in der RewriteRule reinschreiben, aber denn geht es nicht mehr.
Denn kommt immer ein 403 Fehler.

Wie kann ich sowas umsetzen, das alle Sonderzeichen funktionieren?
Ich wäre sehr dankbar, wenn ich hier eine Lösung finde.

Mfg Martin

09.03.2008 22:39

2 Jörg Kruse

Hallo Martin,

wenn du alle Zeichen berücksichtigen möchtest, reicht der Punkt:

RewriteRule ^(.+)$ index.php?nick=$1&%{QUERY_STRING} [L,NC]

09.03.2008 22:53

3 martinm79

Ja, das war auch mein erster Versuch. Aber es kommt denn immer bei den Sonderzeichen wie * oder " der 403 Fehler.

Also das * Zeichen hat den Wert %2A und wenn ich so eine Datei aufrufe geht es nicht.

Also:
public_html/people/martinm79
geht,

aber:
public_html/people/martin%2Am79

geht nicht. Dann kommt:

Forbidden
You don't have permission to access /project/public_html/people/martin*m79 on this server.



Bei anderen Seite geht sowas aber und man kann martin%2Am79 aufrufen. Was mache ich falsch, bzw. was fehlt da noch?

Mfg Martin

09.03.2008 23:31 | geändert: 09.03.2008 23:32

4 martinm79

Ja und in der log Datei vom Apache steht die Fehlermeldung

[Sun Mar 09 23:45:53 2008] [error] [client 127.0.0.1] Filename is not valid: c:/www/project/public_html/people/martin*m79


Mir sagt das leider nichts. Liegt das an der Einstellung vom Apache oder fehlt nur noch ein Teil in der htaccess?

Mfg Martin

09.03.2008 23:48 | geändert: 09.03.2008 23:49

5 Jörg Kruse

Ich hab diese Rule auf zwei Servern (beide Linux) getestet, beide machen keine Probleme bei den genannten Zeichen. Womöglich ist dies ein Windows-Problem? Die Zeichen sind auch in Unix / Linux kritisch in Bezug auf Dateinamen, aber da sie rewritet werden, stellen sie ja kein Problem dar.

Vielleicht kann noch jemand anders mit einem Windows-Apache testen..

09.03.2008 23:54 | geändert: 09.03.2008 23:54

6 martinm79

WOW. Ich atme auf. Ich suche wirklich schon über 3 Wochen nach dem Problem und bin dank dir etwas dichter an der Lösung.

Also es liegt wirklich nur an dem Windows localhost. Habe das ebend online auf einen Linux getestet und es lief perfekt.

gleich mit (.+) und denn einfach das Sternchen %2A.

Also lag es die ganze Zeit nicht an der htaccess sondern an dem Problem das Windows wohl damit nicht klar kommt.

Vielen Dank für die Mühe.

Und dein Forum hast du dir schön geschrieben. ;)

Mfg Martin

10.03.2008 00:01

7 Suinatas (Gast)

Hey,

bin ein gerade an einer ganz ähnlichen Sache und stecke auch mit den Sonderzeichen in der Klemme!

Ich benutze eine Linuxmaschine und möchte in der URL Name mit & und + übergeben, die dann von PHP verwendet werden.

Bsp:

RewriteRule ^kategorie/(.*)/(.+)/([0-9]+)$ category.php?CatName=$1&Manufac=$2&Page=$3

Wenn ich jetzt kategorie/foo/bar&bar/1 aufrufe funktioniert das ganze nur halb.

Statt das Manufac=bar&bar ist wird es zu bar.

Habe auch schon den Link mit urlencode und htmlentities präpariert.
Dann wird zwar im Link bar%26bar übergeben, aber das Problem bleibt!

Habt ihr eine Idee?

MfG

Suinatas

20.03.2008 09:42

8 Jörg Kruse

Hallo Suinatas,

Modrewrite dekodiert das "%26" - also muss das "&" in diesem Fall doppelt kodiert werden zu einem "%2526":

kategorie/foo/bar%2526bar/1

20.03.2008 10:32 | geändert: 20.03.2008 10:33

9 Suinatas (Gast)

Hallo Jörg,

danke für die schnelle Antwort! Warum muss es mit %2526 codiert werden? Und nicht mit %2626 Und wie mache ich das?

MfG

Suinatas

20.03.2008 11:42

10 Jörg Kruse

% wird als %25 codiert, $ als %26

Die doppelte Codierung lässt sich so darstellen:

& -> %26 -> %2526

Oder andersrum:

kategorie/foo/bar%2526bar/1 -> category.php?CatName=foo&Manufac=bar%26bar&Page=1 -> ... bar&bar ...

Und wie mache ich das?

Anscheinend bezieht sich das Problem der doppelten Decodierung nur auf das &? Du könntest von daher nach urlencode() noch eine Funktion anwenden, die die "%26" durch "%2526" ersetzt.

20.03.2008 11:58 | geändert: 20.03.2008 11:59