![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 16.09.2007
Beiträge: 65
|
Hi ist es irgendwie möglich per mod_rewrite GET anfragen zu zerlegen lassen? Soweit funktioniert das mod_rewrite, aber so bald ich ein Formular ausfülle und abschicke steht wieder die hässliche Erweiterung in der Adresszeile. Ich habe auch bisher nix gefunden im netz oder ich hab das falsche gesucht gehabt. Liegt es vieleicht daran das es nicht möglich ist, da es dynamisch erzeugt wird? Gruß Alex |
| | |
| | Nach oben #2 |
| Benutzer Registriert seit: 15.07.2008 Ort: MD
Beiträge: 37
|
Welche häßliche Erweiterung? Und was genau möchtest du machen, kannst du mal ein Beispiel geben?
__________________ <Shadda> Explaining the concept of referential integrity to a mysql user is like explaining condoms to a catholic European PostgreSQL User Group |
| | |
| | Nach oben #3 |
| Benutzer Registriert seit: 16.09.2007
Beiträge: 65
|
ich möchte aus zb. Code: http://localhost/members/view/?show=muster&test=test Code: http://localhost/members/view/muster/test Code: RewriteEngine on
# Spambots nach User_agent aussperren
RewriteCond %{HTTP_USER_AGENT} ^.*Whacker.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FileHound.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*TurnitinBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*JoBo.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*adressendeutschland.*$
# Erzeugt 403 (Forbidden) Fehlermeldung
RewriteRule ^.* - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
|
| | |
| | Nach oben #4 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
|
Also soweit ich weiß, ist es (ohne JS) nicht möglich, den Browser eine Formatierung von GET-Parametern vorzuschreiben. Du wirst bei Formularen also entweder mit POST arbeiten, das Formular per JavaScript abschicken oder aber (eventuell in Verbindung mit POST) einen Zwischenstopp einlegen müssen (PHP-Script, .htaccess o.a.), auf dem die Variablen geparst und den Benutzer dann an eine deinen Wünschen entsprechend formatierte Adresse weiterzuleiten. PS: Das mod_rewrite-Modul ermöglicht keine Veränderungen am abzusendenden Request sondern erlaubt lediglich die interne Umformung von Requests für den HTTP-Server. Mit anderen Worten, das was in der Adressleiste steht, kann mod_rewrite nicht verändern
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int Geändert von Jojo (05.09.2008 um 19:49 Uhr) |
| | |
| | Nach oben #5 |
| Benutzer Registriert seit: 16.09.2007
Beiträge: 65
|
ok, dachte ich mir schon irgendwie.^^ Wie kann man den sowas in php oder JS umsetzten? Ich weiss das man per parse_url() die url zerlegen kann, aber wie bekomme ich das geparste wieder in die url mit header() geht das nicht.
|
| | |
| | Nach oben #6 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Header ist leider ebenfalls eine interne Umleitung... Eine - wenngleich nicht wirklich elegante - Lösung ist ein eine dynamische HTML-Seite mit einem meta-Refresh. Hier findest du ein paar Weiterleitungsarten mit Beispielen. Ob die 301/302-Weiterleitung den Browser zu einer "optischen" Adressänderung zwingt, kann ich dir leider nicht sagen. Das müsstest du selbst ausprobieren
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
| | |
| | Nach oben #7 | |
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
| Zitat:
Vielleicht verstehe ich das gerade falsch, aber denke ich muss meinen Senf doch mal eben dazu geben Warum sollte das per Header nicht gehen ? Ist doch mit "Location" auch eine Weiterleitung, wenn auch eine Serverseitige. PHP-Code: Gruß nox Geändert von nox (05.09.2008 um 22:49 Uhr) Grund: vertipper :) | |
| | |
| | Nach oben #8 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
Mein Fehler Ich hatte irgendwo im Hinterkopf, dass sich die Adresszeile bei dieser Version der Umleitung nicht ändert... Im Grunde sollte es so funktioneren. wäre wohl am einfachsten, alle Requests in eine Datei umzuleiten und dann von dieser Datei weiterzuverbinden...
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int | |
| | |
| | Nach oben #9 |
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 550
|
Ich würde das ganze primär über JavaScript realisieren: Is kein großer Aufwand und wenn JS deaktiviert ist, kann man als fallback immer noch über php ne weiterleitung generieren. Aber man spart sich i.d.R. einen Verbindungsaufbau. Folgendes Script sollte das z.B. tun: HTML-Code: <script type="text/javascript"> function submitForm(form){ if(form.show.value == "undefined" || form.test.value == "undefined"){ alert("Sie müssen alle Formularfelder ausfüllen"); return false; } location.href = "http://localhost/members/view/" + form.show.value + "/" + form.test.value; return false; } </script> <form name="myForm" onsubmit="return submitForm(this);" action="umleitung.php" method="get"> <input type="text" name="show" value="muster" /> <input type="text" name="test" value="test" /> <input type="submit" value="Absenden" /> </form>
__________________ Weißt Bescheid - Scheiß wie weit Geändert von $traight-$hoota (06.09.2008 um 12:00 Uhr) |
| | |
| | Nach oben #10 | |
| Benutzer Registriert seit: 15.07.2008 Ort: MD
Beiträge: 37
| Zitat:
Nur hat man dann pro eigentlicher Anfrage zwei Requests. Den ersten, um die URL glücklich zu machen und den Browser auf die zweite, eigentliche Anfrage umzuleiten. Das kann mit der zeit ganz schön Performance kosten. Vielleicht wäre es sinnvoller, clientseitig im Browser die Anfrage zu manipulieren und bei Formularen beim Submit noch die ZielURL zu berechnen. Alternativ, wenn man sowieso schon von Formularen spricht: als Target eine passende, hübsche URL einsetzen und alles per POST abschicken. Dann steht nur die geschönte URL dort.
__________________ <Shadda> Explaining the concept of referential integrity to a mysql user is like explaining condoms to a catholic European PostgreSQL User Group | |
| | |
| | Nach oben #11 |
| Benutzer Registriert seit: 16.09.2007
Beiträge: 65
|
Das mit dem header() klappt zwar nun, aber danach kann ich nicht mehr auf die $_GET zurück greifen, da es dann wieder ein neuer REQUEST ist. Ich hab ne eigne Klasse die die ganzen REQUEST speichern soll, aber irgendwie wird es jedes mal überschrieben. EDIT: Das gleiche passiert mit dem JS auch. Geändert von Victorious (06.09.2008 um 13:21 Uhr) |
| | |
| | Nach oben #12 | |
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
|
Hi, das ist logisch denn du arbeitest mit mod_rewrite und übergibst die $_GET['test'] und $_GET['show'] ja garnicht mehr, die Daten stehen jetzt in der $_GET['route'], die du dann erst noch zerlegen musst um an die relevanten Daten zu kommen! Zitat:
Gruß nox | |
| | |
| | Nach oben #13 | |
| Benutzer Registriert seit: 15.07.2008 Ort: MD
Beiträge: 37
| Zitat:
Ohne Redirect keine hübschen URLs, mit Redirect sind die Daten weg. Eine Datei würde z.B. eine Session bedeuten - und bei zwei gleichzeitigen Anfragen ist das ein Problem.
__________________ <Shadda> Explaining the concept of referential integrity to a mysql user is like explaining condoms to a catholic European PostgreSQL User Group | |
| | |
| | Nach oben #14 | ||
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
| Zitat:
Nein die Daten sind nicht weg, es scheint als nutzt Victorious ein Framework, oder zumindest einen Router für die URL. Somit sind die Daten noch da aber halt nicht mehr in den genannten $_GET- Parametern. Schau dir doch seine .htaccess Datei an: Code: RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] Der Lösungsansatz von JoJo sieht vor das alle Daten in Formularen erst an z.b. formforwarder.php gesendet werden und von da aus per Header('Location auf die "schöne" URL umgeleitet werden. Anschlißend noch die URL bzw. $_GET['route'] gewünscht zerlegen und fertig Gruß nox | ||
| | |
| | Nach oben #15 |
| Benutzer Registriert seit: 16.09.2007
Beiträge: 65
|
ah ok. Das zerlegen ist nur ein kleines prob. Mit explode kann man es zwar schön zerlegen.Nur es kann ja auch mal sein das die zb das drin steht Code: xy/xy/xy/erstes Get/zweites Get Code: array => route => 'xy/xy/xy/erstes Get/zweites Get' Bzw besser ausgedrückt die länge ist immer unterschiedlich lang. ah ok. Das zerlegen ist nur ein kleines prob. Mit explode kann man es zwar schön zerlegen.Nur es kann ja auch mal sein das die zb das drin steht Code: xy/xy/xy/erstes Get/zweites Get Code: array => route => 'xy/xy/xy/erstes Get/zweites Get' Bzw besser ausgedrückt die länge ist immer unterschiedlich lang. Das einzige was ich wüsste ist das array zerlegen lassen und nicht Keys zugreifen sondern mit Indizies. Ist aber ne mühsame arbeit dann.Man muss dann immer genau wiessen bei welchen Indizi der passende Wert befindet. |
| | |
| | Nach oben #16 |
| Benutzer Registriert seit: 22.11.2006 Ort: Haan
Beiträge: 50
|
Hi, wenn du ein Framework benutzt währe es vielleicht Hilfreich zu wissen welches. Ansonsten kannst du doch einfach die Werte, mittels count, im Array zählen. Dann gehst du einfach -2 zurück und schon hast du die zwei letzten Werte. Gruß nox |
| | |
| | Nach oben #18 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.204
|
1. Möglichkeit: Eine rewriterule schreiben welche die 4 neuen parameter (variablenname1, variablenname2, variableninhalt1, variableninhalt2) dann eben passend umsetzt, dann kannst du direkt auf $_GET zugereifen Anmerkung: kann unter Umständen Probleme geben, bin mir da nicht ganz sicher wie das behandelt wird wenn rewrite-url und die gleichen GET-parameter zusammentreffen bei sowas: http://www.domain.tld/members/view/v...otherVar2Value Denke das kann man auch via mod_rewrite oder auch via abfangen, macht das ganze aber nochmal komplizierter/umständlicher 2. Möglichkeit Via explode auf die aufgerufenen url, da ja der vordere teil der URL bekannt ist, bzw. die anzahl der virtuellen "ordner" [einfache definition jetzt mal für jeden alphanumierschen String der zwischen "/" steht] kannst du einfach so vorgehen (code ungetestet Beispielurl: http://www.domain.tld/members/view/v...var2/var2value $_SERVER['REDIRECT_URL'] = /members/view/var1/var1value/var2/var2value PHP-Code: |
| | |
| | Nach oben #19 |
| Jonas Registriert seit: 03.06.2006
Beiträge: 244
|
Das Problem bei der URL ist, wenn der erste GET-Parameter ein / enthält. Dann passt das wieder nicht mehr. Das heißt, du darfst nicht einfach die letzten beiden Teile des Pfades nehmen, sondern sagen, die URL fängt immer mit /suchen/ an, und dann kommen die Parameter. Wobei das Problem ist, bei /suchen/Test/Tost/Tist kannst du nicht sagen, ob die Parameter Test/Tost und Tist oder Test und Tost/Tist sind.
__________________ Applikations-Programmierung: BlitzMax, BlitzPlus Webentwicklung: PHP, (X)HTML, CSS, JavaScript, MySQL |
| | |
| | Nach oben #20 | |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.204
| Zitat:
| |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| arrays in formularen mit id="" | robo47 | HTML, XML und CSS | 2 | 29.05.2006 15:24 |
| Aktions-Auswahl bei Formularen | andy74 | PHP-Programmierung | 6 | 21.01.2006 22:59 |
| Stinknormaler enctype bei Formularen | Jojo | HTML, XML und CSS | 3 | 29.12.2005 18:20 |
| Problem bei der Verarbeitung bei Formularen | sauer82 | Enterprise Java | 1 | 01.10.2005 12:57 |