Die Mitgliedschaft ist KOSTENLOS und bietet allen registrierten Nutzern unbegrenzten Zugriff auf alle Funktionen, Ressourcen und Tools von ConsultDomain.de! Optionale Mitgliedschaftsupgrades schalten exklusive Vorteile frei, wie Profil-Signaturen mit Links, Bannerplatzierungen, Erwähnungen im wöchentlichen Newsletter und vieles mehr – individuell angepasst an Ihr Mitgliedschaftslevel!

Willkommen!

Durch Ihre Registrierung bei uns können Sie mit anderen Mitgliedern unserer Community diskutieren, teilen und private Nachrichten austauschen.

Jetzt anmelden!

Regex...

pyro

Registrierter Benutzer
Registriert
06. Juli 2004
Beiträge
5.284
Hallo,

an die webmaster, kann mir irgendwer hierbei ein wenig helfend unter die Arme greifen...? :)

Hab also den regex:

RewriteRule suche/(.*)/(.*)/(.*)/(.*)/(.+)\.htm$ suche.php?name=$1&bundesland=$2&branche=$3&ort=$4&start=$5

Nun hab ich aber das Problem, daß der Server anscheinend nur akzeptiert, wenn ein Zeichen kommt, soll heißen:

suche/testsuche////10.htm das ja dann eigentlich suche.php mit den parametern name=testsuche und start=10 aufrufen sollte, tut eben das nicht, da sich der server nach jedem slash zumindest 1! Zeichen erwartet. Jedoch möchte ich quasi den slash als trennzeichen heranziehen wo dann ein wert eingetragen sein kann oder auch nicht....

hab schon div. optionen versucht so z.b auch eine "oder" im regex a la

suche/(.*|s) etc... also entweder ein Zeichen oder ein whitespace zeichen... das prob das ich jedoch grundlegend hab ist, daß kein Zeichen in regex für "kein Zeichen" existiert... soll heißen auch whitespace-zeichen sind ja zeichen a la leertaste etc... ich bräuchte jedoch quasi das equivalent für [kein zeichen]...

mfg pyro :)
 
Habe eine Weile gebraucht, um zu verstehen was gemeint ist :-)

Leider kann ich dir dabei nicht weiterhelfen, da ich ein solches Problem noch nicht hatte.
Doch möchte ich dir modrewrite.de empfehlen, falls dir hier niemand schnell eine Antwort geben kann.
 
Hallo pyro,

der String "(.*)" bedeutet "mindestens kein bis beliebig" viele Zeichen.
Die einzige Stelle, wo mindestens ein Zeichen gefragt ist, wäre "(.+)"
was soviel heißt wie "mindestens ein bis beliebig" viele Zeichen. Von
daher ist der Regex erstmal korrekt und der Fehler ist wohl eher darin
zu finden, daß doppelte Slashes ohne Zwischenraum auch wie ein einziges
Slash zu werten sind ("///////root" führt trotzdem nur nach "/root").
Der Webserver versteht unter der Anforderung suche/////5.html dann
suche/5.html. Das kannst Du einfach testen, indem Du mal "RewriteRule
suche/(.+)\.htm$ suche.php?name=$1 [R,L]" Deiner .htaccess hinzufügst.
Du wirst dann bei obiger Anfrage auf "suche.php?name=5" weitergeleitet.

Als Lösungsmöglichkeit böte sich an, statt der mittleren Slashes einfach
Kommata zu verwenden:
RewriteRule suche/(.*),(.*),(.*),(.*)/(.+)\.htm$
suche.php?name=$1&bundesland=$2&branche=$3&ort=$4&start=$5 [L]

liebe Grüße

real
 
versuchs mal so...

RewriteRule ^suche/([^\.]+)/([^\.]+)/([^\.]+)/([^\.]+)/([0-9]*)\.htm$ suche.php?name=$1&bundesland=$2&branche=$3&ort=$4& start=$5 [L]

gruß
ronny
 
versuchs mal so...

RewriteRule ^suche/([^\.]+)/([^\.]+)/([^\.]+)/([^\.]+)/([0-9]*)\.htm$
suche.php?name=$1&bundesland=$2&branche=$3&ort=$4& start=$5 [L]

gruß
ronny

Ich glaube er wollte, daß er im Grunde 5 Slashes hintereinander stehen lassen kann, ohne dort etwa einen Parameter übergeben zu müssen. Bei Deinem Vorschlag muß er aber auf jeden Fall mindestens ein Zeichen (außer einem Punkt) zwischen den Slashes stehen haben. Das wäre ja wieder die Ausgangssituation.
 
ok blöde frage, wenn die anderen parameter ausser key und anzal eh nicht mit übergeben werden sollen, warum dann //// ?
 
Um die Möglichkeit zu haben, gegebenenfalls zum Beispiel eben _ein_
Bundesland oder eben _keines_ angeben zu müssen.
Aber man könnte ja vielleicht einen Standardwert wie "alle" o.ä.
übergeben, dann hätte man das Problem übrigens auch nicht.
 
ich glaub ich steh aufm schlauch ... es wird doch eh immer nur umgeschrieben, was angegeben wird, also ist doch alles andere blödsinn ...

RewriteRule ^suche/([^\.]+)/([0-9]*)\.htm$
suche.php?name=$1&start=$2 [L] is dann das erste und dann einfach so weiter

wenn dann zusätzliche parameter abgefragt werden, erfolgt der linkaufbau ebend entsprechend... (if abfrage ob box gecheckt oder nicht) kann doch nicht so kompliziert sein ;)

gruß
ronny
 
RewriteRule ^suche/([^\.]+)/([0-9]*)\.htm$ suche.php?name=$1&start=$2 [L]

Wie würde dann suche//Hessen///3.html im Gegensatz zu
suche////Kassel/3.html oder suche///IT//3.html umgeschrieben? (Bedenke
"///"=="/")
Oder suche//Hessen//Kassel/3.html und suche//Hessen/IT//3.html

Da würden jeweils die Parameter wahrscheinlich unrichtig belegt werden:
RewriteRule ^suche/([^\.]+)/([0-9]*)\.htm$ suche.php?name=$1&start=$2 [L]
suche//Hessen///3.html -> suche.php?name=Hessen&start=3
suche////Kassel/3.html -> suche.php?name=Kassel&start=3
.
.
.

Es würde sich aber vielleicht noch anbieten, einen Standardparameter wie
"alle" oder "egal" zuzulassen suche/egal/alle/alle/Kassel/1.html, dann
könnte man sich das alles schenken ;-)

if abfrage ob box gecheckt oder nicht
Das geht nur mit Javascript. Das wäre schlecht, weil dann das Benutzen des Formulars ohne Javascript nicht möglich wäre. Außerdem wird beim Erstellen des Querys via Formular-submit eh kein mod_rewrite-Link erstellt. Das rewrite kann man nur als externen Link verwenden oder für eine Pagination.

real
 
Danke fürs input...

@real, es scheint du hast den kern des Problems gefunden, vielen Dank dafür :) ... hatte mir beistriche auch schon überlegt, da auch alle oder kein zeichen ohne "/" ---> ([^/]*)
nicht funktioniert hat...

natürlich könnte ich quasi nen parameter für "keine eingrenzung" einsetzen der dann im mod rewrite übergeben würde, der würde dann aber halt eine tlw. änderung der programmierung nötig machen....

mal sehen... ob ich faul bin und einfach andere trennzeichen a la beistrich oder minus o.ä. verwende, oder die scripten überarbeite ;)

@ronny danke auch dir :) we think alike... ;) :) soll heißen, was du beschrieben hast, hab ich vorab schon versucht aber war erfolglos (nur halt mit * statt +)... wohl auf basis dessen, was real beschrieben hat (mehrere slashes werden wie einer interpretiert)...

wenn dann zusätzliche parameter abgefragt werden, erfolgt der linkaufbau ebend entsprechend... (if abfrage ob box gecheckt oder nicht) kann doch nicht so kompliziert sein

das wäre natürlich schon auch eine Möglichkeit, jedoch müßte ich dann die links auch derart modifizieren, daß apache weiß, welche parameter das nun sind ... wäre sicher mit lookbackward oder so ähnlich umzusetzen, wenn man parameter/wert/parameter/wert macht... irgendwas a la

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.+)/([^/]+)/([^/]+)$ $1?$2=$3 [QSA,E=TEST:$1]

RewriteCond %{ENV:TEST} ^(.+)/([^/]+)/([^/]+)$
RewriteRule ^.*$ %1?%2=%3 [QSA,E=TEST:%1,N]

RewriteCond %{ENV:TEST} ^([^/]+)/(.+)$ [OR]
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteRule ^.*$ suche.php?%1=%2 [QSA,L]

Aber denke/hoffe da gibt´s einfachere versionen, wie z.B. nen alias wert für keinen wert einzusetzen... ;) :)

mfg pyro :)
 
mal sehen... ob ich faul bin und einfach andere trennzeichen a la beistrich oder minus o.ä. verwende, oder die scripten überarbeite

gehöre wohl eher zu den fauleren menschen.... ;)

mfg pyro :)
 
gehöre wohl eher zu den fauleren menschen....
darum habe ich auch nicht den ganzen Thread durchgelesen ;)

Da du die URL eh nicht clientseitig generieren kannst (können schon, aber das schliesse ich nun mal aus ;)) Wieso sagst du nicht einfach, Bindestrich = Nix.
sdfsdf////dfsdf.htm >> sdfsdf/-/-/-/dfsdf.htm


Seien wir doch mal ehrlich sdfsdf////dfsdf.htm sind doch eh hässliche Dateinamen ;) , ich weiss nicht einmal ob diese überhaupt zugelassen sind!
 

Who has viewed this thread (Total: 1) Details anzeigen

Neueste Themen

Beliebte Inhalte

Besonderer Dank

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
68.384
Beiträge
377.437
Mitglieder
6.775
Neuestes Mitglied
WolfgangM
Zurück
Oben