Seite 1 von 2

[GELÖST] mod_rewrite - Fragezeichen umwandeln

Verfasst: 26.02.2007, 15:34
von gartoffel
Hallo zusammen

Habe via Google dieses Forum gefunden. Mich interessiert folgender Beitrag:

https://www.abakus-internet-marketing.d ... 37726.html

Ich frage mich folgendes:
Ich möchte, dass ein Aufruf der Seite https://www.silberperle.ch/profile.php?id=50 automatisch auf die Seite https://ch.silberperle.org/profile/50 springt.

Dazu nutze ich mod_rewrite in einer .htaccess Datei:

Code: Alles auswählen

RewriteRule ^profile\.php?id=([0-9]+)$ http://ch.silberperle.org/profile/$1
Alles schön und gut, nur leider funktioniert das ? bei ...php?id=... nicht. Sobald ich das entferne, kann ich sehr wohl von https://www.silberperle.ch/profile.phpid=50 nach https://ch.silberperle.org/profile/50 springen, aber das Fragezeichen ist nun mal da und muss also berücksichtigt werden.

Hat irgendjemand eine Ahnung, was ich ändern muss? Habe bereits diverse Syntaxänderungen ausprobiert, aber kam zu keinem klugen Resultat.

Herzlichen Dank und Gruss aus der Schweiz
gartoffel

Verfasst:
von

Re: mod_rewrite - Fragezeichen umwandeln

Verfasst: 26.02.2007, 15:38
von cren
gartoffel hat geschrieben:...Habe bereits diverse Syntaxänderungen ausprobiert...
Und welche hast du ausprobiert? Eigentlich müsste doch ne einfache Maskierung mittels Backslash reichen.

Verfasst: 26.02.2007, 15:42
von gartoffel
Ja, genau die angetönte Änderung habe ich zum Beispiel erfolglos ausprobiert.
Auch mittels .* oder .? (also ein beliebiges Zeichen) konnte nicht das Gewünschte erreicht werden.

Edit um 15:51 Uhr:
Jetzt wirds ganz spooky: Wenn ich die Adresse wie folgt eingebe, dann funktionierts: https://www.silberperle.ch/profile.php%3Fid=1
Aber ich möchte ja, dass es auch geht, wenn der User ? anstatt %3F eingegeben hat.

Hat jemand eine Erklärung?

Verfasst: 26.02.2007, 16:04
von chris21

Code: Alles auswählen

RewriteRule ^profile\.php\?id=([0-9]+)$ http://ch.silberperle.org/profile/$1
So hatte cren das gemeint und so sollte es auch funktionieren.

Verfasst: 26.02.2007, 16:08
von gartoffel
@chris21:
Ich habe cren schon richtig verstanden, danke. Genau die von Dir gepostete Rule ist im Moment aktiv und funktioniert nicht, bzw. wie von mir angetönt nur mit dem %3F anstatt dem "?"...

[solved]

Verfasst: 26.02.2007, 16:30
von gartoffel
Ich darf mit Stolz verkünden, dass das Problem gelöst wurde:

Unter Punkt 7 des folgenden Forums habe ich die Lösung gefunden:

https://www.modrewrite.de/foren/ftopic82.html
Auf den QueryString kann nicht direkt über eine RewriteRule zugegriffen werden, wie in folgendem Beispiel:

Code: Alles auswählen

#falsch!
RewriteRule ^fileinfo\.php\?file=([^&]+)&ordner([^&]+) /datei/$2/$1 [R=301,L]
Ich habe das bei mir jetzt folgendermassen gelöst:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^profile\.php$ http://ch.silberperle.org/profile/%1? [R=301,L] 
Ihr könnt euch selber davon überzeugen: es funktioniert!

Herzlichen Dank für euren seelischen Beistand und bis bald
gartoffel

Verfasst: 26.02.2007, 16:30
von chris21
Gut, dass sollte man sich merken.

Verfasst: 27.07.2008, 21:46
von schmidtsmikey
Hallo,

ich suche mich mittlerweile dumm und dämlich. Habe den htaccess-Eintrag mehrfach bearbeitet, aber ohne Erfolg.

Mein Problem: ich hatte früher mit Framesets gearbeitet und ein Java-Script zum Framenachladen verwendet. Aus diesem Grund gibt es viele Urls nach dem Schema

www.domain.de/index.html?name-der-datei.html
www.domain.de/index.html?andere-datei.html
www.domain.de/index.html?und-noch-eine-datei.html

Wie kann ich nun eine Rewrite-Regel definieren, welche diese URL weiterleitet. Folgender Eintrag in der htaccess-Datei ist erfolglos:

Code: Alles auswählen

RewriteRule ^index\.html(.*)name-der-datei\.html$ http://www.abc.de/ [L,R=301]
Probleme bereitet mir das Fragezeichen. HAbe es auch nach dieser Anleitung versucht, aber hier wird in der Condition alles nach dem id= verwendet. Bei mir ist es aber anders, da nach dem ? ein unterschiedlicher String folgt.

Weiß jemand Rat? Danke im Voraus!

Verfasst: 27.07.2008, 23:10
von chris21
Hi,

wenn es bei Dir keine URLs mit Query Strings (sprich: ? in den URLs) mehr gibt, sollte folgendes helfen:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^index\.html http://www.example.com/? [L,R=301]
Damit werden jetzt alle Anfragen mit "index.html?irgendwas......" auf www.example.com weitergeleitet.

Verfasst: 28.07.2008, 08:09
von schmidtsmikey
Danke für die prompte Antwort!

Es sollen aber nicht alle alten Seiten auf eine Domain weiterleiten, sondern auf die jeweilige neue Seite:

index.html?name-der-datei.html --> aaa.html
index.html?andere-datei.html --> bbb.html
index.html?und-noch-eine-datei.html --> ccc.html

Im Prinzip muss ich für jede einzelne URL (das sind rund 80-100 Einträge) auf eine neue URL umleiten.

Das habe ich auch schon so getan, nur bei den URLs mit einem ? gibt es das Problem, dass dieses eine einzige Zeichen nicht gematched wird. Ich habe es mit (.*), ?, \? und der passenden Escape-Sequenz versucht. Immer ohne Erfolg...

Verfasst: 28.07.2008, 12:56
von chris21
Das mit dem Fragezeichen funktioniert auch nicht, darauf hatte gartoffel uns in diesem Thread bereits praktischerweise gebracht.

Wenn die neuen Seiten andere URLs haben als das, was bisher nach dem ? stand, hilft nur, für jede Seite einzeln so was zu starten:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^eine-alte-datei\.html$
RewriteRule ^index\.html http://www.example.com/neue-datei.html? [L,R=301]
Ansonsten, falls aus index.html?die-datei.html einfach www.....tld/die-datei.html werden sollte, wäre es einfacher, da könnte man es so regeln:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^index\.html http://www.example.com/%1? [L,R=301]

Verfasst: 28.07.2008, 14:22
von schmidtsmikey
vielen Dank! Das funktioniert. Prima!

Verfasst: 18.09.2009, 14:08
von daLuiz
.....

Verfasst: 18.09.2009, 17:40
von Kristian
Escape die - in der RewriteCond, ansonsten steht da übersetzt: 4 bis H, w bis t usw.

Verfasst: 18.09.2009, 19:56
von daLuiz
.....