Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837222) Verfasst am: 11.10.2007, 13:34 Titel: Das gegenteil von mod_rewrite |
|
|
Tja, davon scheint bei den htaccess-Codern auch noch keiner was gehört zu haben:
Die mod_rewrite wird normalerweise dazu benutzt, Fragezeichen-URLs wie
http://www.beispiel.com/datei.php?param1=xy¶m2=yx
in statische URLs wie
http://www.beispiel.com/xyyx.html
umzuwandeln, bzw. dies vorzutäuschen.
Nun brauche ich aber genau das Gegenteil: Ich muss Anfragen an eine Fragezeichen-URL auf eine bestehende statische URL umleiten.
Gibt es hier eine mod_rewrite-Lösung bzw. kennt jemand eine?
Einfaches Austauschen der Werte funktioniert nicht, da der Server Werte nach dem ? beim rewrite zu ignorieren scheint, auch wenn sie explizit angegeben wurden.
Hier der Code, den ich verwende und der NICHT funktioniert:
Code: | RewriteEngine On
RewriteRule ^review.php?titel=(.*)$ kritiken/krtk-$1.html |
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#837232) Verfasst am: 11.10.2007, 13:55 Titel: Re: Das gegenteil von mod_rewrite |
|
|
Shadaik hat folgendes geschrieben: | Nun brauche ich aber genau das Gegenteil: Ich muss Anfragen an eine Fragezeichen-URL auf eine bestehende statische URL umleiten. |
Du willst ne statische URL in eine Fragezeichen-URL umwandeln lassen?
Habe ich dies nun richtig verstanden?
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837234) Verfasst am: 11.10.2007, 13:58 Titel: |
|
|
Naja, ich würde die statischen schon ganz gerne erhalten, die Fragezeichen-URLs sind nur für ein Programm, das meine Spielewertungen als Teil eines Meta-Wertungssystems (Errechnen einer Durchschnittswertung aus vielen Einzelwertungen) einbindet.
Im Notfall werde ich eine php mit mehreren GET und header() basteln müssen, das sollte auch gehen.
Eine globale Lösung mit RewriteRule wäre aber besser, da schneller.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#837240) Verfasst am: 11.10.2007, 14:07 Titel: |
|
|
Ich bin etwas irritiert, weil dein Codeschnipsel, doch eigentlich von Fragezeichen zu statisch macht.
Shadaik hat folgendes geschrieben: | Hier der Code, den ich verwende und der NICHT funktioniert:
Code: | RewriteEngine On
RewriteRule ^review.php?titel=(.*)$ kritiken/krtk-$1.html | |
Wolltest du es nicht andersherum?
Code: | RewriteEngine On
RewriteRule ^kritiken/krtk-(.*).html$ review.php?titel=$1 |
Oder verstehe ich dich nicht ganz?
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837245) Verfasst am: 11.10.2007, 14:17 Titel: |
|
|
Okay, in zwei Schritten:
1. Besucher kommt über einen Fragezeichenlink von der anderen Seite, zum beispiel
Code: | http://www.spilmkritiken.de/review.php?metroid_prime |
(RewriteRule greift)
2. Besucher wird auf die entsprechende statische Webseite umgeleitet, bei diesem Beispiel also auf
http://www.spilmkritiken.de/kritiken/krtk-metroid_prime.html
Die Fragezeichen-URL führt ins Nirwana (review.php existiert nicht), die normale URL existiert und deren Inhalt soll dem Besucher angezeigt werden.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#837248) Verfasst am: 11.10.2007, 14:21 Titel: |
|
|
Hat bei mir nachher auch klick gemacht.
Versuch mal:
Code: | RewriteRule ^review\.php\?titel=(.*)$ kritiken/krtk-$1.html |
http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Zitat: | ? : Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, muss es aber nicht, d. h. der Ausdruck kommt null- oder einmal vor. (Dies entspricht {0,1} ) |
Zitat: | \ hebt gegebenenfalls die Metabedeutung des nächsten Zeichens auf. Beispielsweise lässt der Ausdruck „(A\*)+“ die Zeichenketten „A*“, „A*A*“ etc. zu. Auf diese Weise lässt sich auch ein Punkt „.“ mit „\.“ suchen. |
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837252) Verfasst am: 11.10.2007, 14:27 Titel: |
|
|
Apeiron hat folgendes geschrieben: | Hat bei mir nachher auch klick gemacht.
Versuch mal:
Code: | RewriteRule ^review\.php\?titel=(.*)$ kritiken/krtk-$1.html |
http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Zitat: | ? : Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, muss es aber nicht, d. h. der Ausdruck kommt null- oder einmal vor. (Dies entspricht {0,1} ) |
Zitat: | \ hebt gegebenenfalls die Metabedeutung des nächsten Zeichens auf. Beispielsweise lässt der Ausdruck „(A\*)+“ die Zeichenketten „A*“, „A*A*“ etc. zu. Auf diese Weise lässt sich auch ein Punkt „.“ mit „\.“ suchen. | |
*andiestirnklatsch* Natürlich!
Das zum Thema Wald und Bäume.
Vielen Dank!
edit: Doch nicht, das Fragezeichen wird auch weiterhin ignoriert und Firefox versucht, die review.php aufzurufen. Ich vermute, es liegt daran, dass Fragezeichen grundsätzlich zur Parameterweitergabe gedacht sind.
Ich werde also ein entsprechendes php-Script verfassen müssen.
Danke jedenfalls. Den Versuch war's wert.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837319) Verfasst am: 11.10.2007, 17:11 Titel: |
|
|
das leitet zu Code: | http://www.spilmkritiken.de/kritiken/krtk-titel=metroid_prime.html |
was noch nichtmal ein gültiger dateiname ist.
Ein Kollege konnte das Problem inzwischen nachstellen, es liegt tatsächlich am Fragezeichen. Er meint, da hätte ich einen ziemlich dicken Bug entdeckt.
Sogar eine Angabe wie (skizziert) "leite index.htm.+ zu index.php" funktioniert eigentlich, wie sie sollte (spich, alle Eingaben mit index.htm(beliebigeZeichenfolgebeliebigerLänge) leiten zu index.php um, es sei denn, in der Zeichenfolge befindet sich ein Fragezeichen.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837353) Verfasst am: 11.10.2007, 18:10 Titel: |
|
|
Ich habe jetzt diese php erstellt, mal schaun, ob's funktioniert:
Code: |
header("Location: http://www.spilmkritiken.de/kritiken/krtk-"$_GET["titel"]".html");
exit;
|
Irgendwelche Meinungen bzw. Warnungen?
edit
das ergibt das hier:
Zitat: | Parse error: syntax error, unexpected T_VARIABLE in [...]review.php on line 2 |
Wer mag übersetzen? Darf ich GET nicht in header einsetzen?
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837361) Verfasst am: 11.10.2007, 18:25 Titel: |
|
|
Und hier ist meine funktionierende Lösung:
Code: | $name = $_GET['titel'];
header("Location: http://www.spilmkritiken.de/kritiken/krtk-$name.html");
exit; |
Gestern konnte ich noch kein php jenseits von inlude() und echo.
Ich bin stolz auf mich.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
disillusioned sinnlos, gottlos, ahnungslos
Anmeldungsdatum: 12.07.2007 Beiträge: 109
Wohnort: Hessen
|
(#837364) Verfasst am: 11.10.2007, 18:31 Titel: |
|
|
Ist zwar schon gelöst, also nur nebenbei erwähnt: Der Fehler bei deiner ersten Version war der fehlende '.', der bei php zum Verketten von Strings dient. Würde dann also so lauten:
Code: |
header("Location: http://www.spilmkritiken.de/kritiken/krtk-".$_GET["titel"].".html");
|
_________________ "Die mystischen Erklärungen gelten für tief; die Wahrheit ist, dass sie noch nicht einmal oberflächlich sind." - Friedrich Nietzsche
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837369) Verfasst am: 11.10.2007, 18:39 Titel: |
|
|
disillusioned hat folgendes geschrieben: | Ist zwar schon gelöst[...] |
Ich danke dir trotzdem, lerne ich doch gerne was über solche Dinge.
Jetzt hab ich seit gestern erst mit .htaccess und dann damit gebastelt, viel probiert, viel gelesen und schließlich Erfolg gehabt.
Schöne Sache, das, sowas hatte ich das letzte Mal auf nem Commodore. Seitdem hab ich mich auch schon nicht mehr an Programmiersprachen gesetzt, nur Markup-Sprachen
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837771) Verfasst am: 12.10.2007, 10:43 Titel: |
|
|
Jetzt hab ich natürlich alles schon eingebunden (und php und .htaccess lassen sich leider nicht offline testen) und du weisst ja: "Never change a running system".
Ich nehme an, der QUERY_STRING teilt dem Server explizit mit, nach den Inhalten der Fragezeichen Ausschau zu halten?
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#837844) Verfasst am: 12.10.2007, 12:49 Titel: |
|
|
RewriteCond ist eine Bedingung und besagt, dass die folgende RewriteRule nur dann ausgeführt wird, wenn im Query String 'titel=' vorkommt, dabei wird der String nach 'titel=' in eine Variable gespeichert.
Die RewriteRule ersetzt dann 'review.php' mit dem String 'kritiken/krtk-%1.html', wobei %1 die Variable aus der RewriteCond repräsentiert.
Und es ist kein Bug, dass RewriteRule ab dem Fragezeichen nicht weiterschaut, sondern so beabsichtigt, denn der Query String soll nicht beartbeitet werden, weshalb es auch sofort beim ersten Auftreten dieses, also das Fragezeichen, die ganze Sache abbricht.
Ich musste auch erstmal ne Zeit googeln, wollte es aber selber auch wissen.
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#837936) Verfasst am: 12.10.2007, 14:19 Titel: |
|
|
Lustigerweise ist grade jemand im Abakus-Forum aufgeschlagen, bei dem auch das in einem ähnlichen Fall nicht funktioniert. Ich geb durch, sobald da jemand rausgefunden hat, warum nicht.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#837962) Verfasst am: 12.10.2007, 14:46 Titel: |
|
|
Shadaik hat folgendes geschrieben: | Lustigerweise ist grade jemand im Abakus-Forum aufgeschlagen, bei dem auch das in einem ähnlichen Fall nicht funktioniert. Ich geb durch, sobald da jemand rausgefunden hat, warum nicht. |
Was soll er raus finden?
Das Verhalten von RewriteRule bezüglich dem Fragezeichen ist beabsichtigt und nachvollziehbar.
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#838029) Verfasst am: 12.10.2007, 15:42 Titel: |
|
|
Apeiron hat folgendes geschrieben: | Shadaik hat folgendes geschrieben: | Lustigerweise ist grade jemand im Abakus-Forum aufgeschlagen, bei dem auch das in einem ähnlichen Fall nicht funktioniert. Ich geb durch, sobald da jemand rausgefunden hat, warum nicht. |
Was soll er raus finden?
Das Verhalten von RewriteRule bezüglich dem Fragezeichen ist beabsichtigt und nachvollziehbar. |
nene, dein letzter Vorschlag.
Inzwischen kam diese Lösung, die aber auch nicht funktioniert:
Code: | RewriteEngine On
RewriteCond %{REQUEST_URI} ^/artikel.php
RewriteCond %{QUERY_STRING} ^id=([0-9]+)
RewriteRule ^(.*)$ http://www.domain.de/news/artikel%1.html? [R=301,L] |
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#838030) Verfasst am: 12.10.2007, 15:43 Titel: |
|
|
Shadaik hat folgendes geschrieben: | Apeiron hat folgendes geschrieben: | Shadaik hat folgendes geschrieben: | Lustigerweise ist grade jemand im Abakus-Forum aufgeschlagen, bei dem auch das in einem ähnlichen Fall nicht funktioniert. Ich geb durch, sobald da jemand rausgefunden hat, warum nicht. |
Was soll er raus finden?
Das Verhalten von RewriteRule bezüglich dem Fragezeichen ist beabsichtigt und nachvollziehbar. |
nene, dein letzter Vorschlag.
Inzwischen kam diese Lösung, die aber auch nicht funktioniert:
Code: | RewriteEngine On
RewriteCond %{REQUEST_URI} ^/artikel.php
RewriteCond %{QUERY_STRING} ^id=([0-9]+)
RewriteRule ^(.*)$ http://www.domain.de/news/artikel%1.html? [R=301,L] | |
Kannst du mal den Link geben?
Würde mir es gerne mal anschauen.
Zuletzt bearbeitet von Gustav Aermel am 12.10.2007, 15:53, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
|
Nach oben |
|
 |
Gustav Aermel dauerhaft gesperrt
Anmeldungsdatum: 05.04.2007 Beiträge: 1811
|
(#838034) Verfasst am: 12.10.2007, 15:53 Titel: |
|
|
Sollen dort mal folgendes versuchen:
Code: | RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^artikel\.php$ artikel%1.html |
Die .htaccess Datei muss natürlich in den Newsordner.
edit:
Außerdem sollte er mal seine Punkte mit Schrägstrichen versehen. '.' -> '\.'
|
|
Nach oben |
|
 |
|