Zur Navigation

Weiterleiten einer URL abhängig vom Query String

..bei Anwesenheit von mehreren Query Strings

1 Marco (Gast)

Hallo Forum, hallo Jörg,

ich lese mich jetzt schon seit Stunden durchs Web und auch durch dieses Forum, finde aber keine Lösung für mein Problem.

Vielleicht könnt Ihr mir helfen?

Eine ehemalige Joomla-Seite ohne SEO-URLs (viele Query Strings, aber nur 2 wichtige) wird demnächst ersetzt durch eine neue Seite mit lesefreundlichen URLs. Da einige der alten Seiten Schon bei Google indiziert sind, möchte ich diese auf die entsprechenden neuen Seiten umleiten.

Mod Rewrite funktioniert super auf dem Server, nur nicht für folgendes:

Alte URL: www.alt.de/cms/index.php?option=com_content&task=view&id=18&Itemid=38

Neue URL: www.neu.de/kontakt/impressum

Mein erster Versuch war folgender:
RewriteCond %{QUERY_STRING} ^option=com_content([^]+]+)$
RewriteRule ^index\.php$ /? [L,R=301]

Das funktioniert super: Der Aufruf von alten Seiten (index.php?option=...) wird umgeleitet auf die Startseite der Domain.

Nur leider wird nicht nach dem Query String ID und ItemId unterschieden. Diese beiden Strings brauche ich aber um die alte Seite zu definieren.
Um das Problem zu lösen habe ich viele Versuche gestartet, die alle nicht mehr funktioniert haben.

Ein weiterer Versuch sah folgendermaßen aus:
RewriteCond %{QUERY_STRING} ^Itemid=38$
RewriteRule ^([^\.\?/]+)/([0-9]+)$  http://www.neu.de/kontakt/impressum? [L,R=301]

Die Idee war, dass alle Seiten mit dem Query String "Itemid=38" auf die entspr. neue Seite geleitet werden.

Alle Seiten deshalb, weil die ursprüngliche URL noch viele andere Query Strings enthält, von denen ich nicht weiß wie sie in der RewriteRule zu definieren sind.

Habe es z.B. auch so probiert:
RewriteCond %{QUERY_STRING} ^Itemid=38$
RewriteRule ^index\.php(.*)$  http://www.neu.de/kontakt/impressum? [L,R=301]

Hat auch nicht geklappt. Und sogar wenn diese Problem gelöst wäre, müsste ich noch nach dem zweiten Query String ID unterscheiden, da es Seiten mit gleicher ItemId aber unterschiedlicher ID gibt.

Weiterleitung abhängig von 2 Query Strings evtl. mit folgender Lösung??:
RewriteCond %{QUERY_STRING} ^Itemid=38$ && ^id=18?

Meine Notlösung - die kompletten URLs reinzuschreiben - hat leider auch nicht funktioniert:
RewriteRule ^cms/index.php?option=com_content&task=view&id=18&Itemid=38$ http://www.neu.de/kontakt/impressum? [L,R=301]
...escapen\ von ? und & hat auch nichts geholfen..

Fazit:
Ich komme hier einfach nicht weiter. Es wäre genial, wenn mir jemand sagen könnte wie es gemacht werden muss!

Problemstellung:

Alte URL: www.alt.de/cms/index.php?option=com_content&task=view&id=18&Itemid=38

abhängig von "id" und "Itemid" auf

Neue URL: www.neu.de/kontakt/impressum

umleiten

Hilfe ist äußerst willkommen! Vielen Dank im Voraus,
viele Grüße

Marco

PS: Dass ich Newbie beim .htaccess-erstellen bin, hat man gemerkt, oder ;-)

02.12.2009 01:42

2 Jörg Kruse

Query String bezeichnet den gesamten String nach dem "?" und nicht nur einen einzelnen Paramater. Du kannst es entsprechend mit so einer Bedingung versuchen:

RewriteCond %{QUERY_STRING} option=com_content&task=view&id=18&Itemid=38

02.12.2009 08:40

3 Marco (Gast)

Wow, Danke - hat funktioniert! Ich dachte man muss das "&" irgendwie escapen.
War einfacher als ich dachte ;-)

LG,
Marco

Lösung:
RewriteCond %{QUERY_STRING} ^option=com_content&task=view&id=18&Itemid=38$
RewriteRule ^index\.php$ http://www.neu.de/kontakt? [L,R=301]

02.12.2009 11:50

... 5 Monate später ...

4 Constantin (Gast)

Ich habe genau das gleiche Problem habs aber nicht hinbekommen:

RewriteCond %{QUERY_STRING} index.php?option=com_content&view=article&id=3&Itemid=31
RewriteRule http://www.url.com/de/agb [L,R=301]

Funktioniert leider nicht so. Hast du eine Idee, Jörg? Wäre für jeden Vorschlag dankbar.

28.05.2010 19:08

5 Jörg Kruse

Das "index.php?" gehört nicht zum Query String, probier's mal so:

RewriteCond %{QUERY_STRING} option=com_content&view=article&id=3&Itemid=31
RewriteRule index\.php http://www.url.com/de/agb [L,R=301]

28.05.2010 20:19

6 Constantin (Gast)

Hi Jörg,

danke für die schnelle Antwort.Habe das eingebaut und bekomme leider einen Umleitungsfehler.

Meine .htaccess sieht so aus:
RewriteEngine On
RewriteCond %{THE_REQUEST} index\.php [NC]
RewriteRule ^(.*)index\.php /$1 [NC,R=301]

Damit wollte ich die index.php umleiten, allerdings passiert das jetzt für alle URLs und nicht nur für die url.com/index.php. Kann man das auf die url.com begrenzen?

Wenn das mit dem begrenzen auf die eine URL funktioniert, dann habe ich immer noch mein ursprüngliches Problem
index.php?option=com_content&view=article&id=3&Itemid=31

Hast du eine Idee? Weiss leider wirklich nicht weiter.

Viele Grüße
Constantin





29.05.2010 08:54

7 Jörg Kruse

Habe das eingebaut und bekomme leider einen Umleitungsfehler.

Die genannte Rule alleine sollte keinen Umleitungsfehler erzeugen. Was steht denn sonst noch in der htaccess Datei?

Für die andere Frage wäre es besser, einen neuen Thread zu eröffnen, da diese mit dem Thema Query String nichts zu tun hat

29.05.2010 20:18

8 Constantin (Gast)

Hi Jörg,

das ist der Inhalt der .htaccess

RewriteEngine On

RewriteCond %{QUERY_STRING} option=com_content&view=article&id=3&Itemid=31
RewriteRule index\.php http://www.url.com/de/agb [L,R=301]


########## Begin - Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Folgender Fehler erscheint danach:

Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

Gruß
Constantin

29.05.2010 23:04

9 Jörg Kruse

Häng mal hinten noch ein "?" dran, dass der alte Query String abgehängt wird

RewriteRule index\.php http://www.url.com/de/agb? [L,R=301]

30.05.2010 17:47

10 Constantin (Gast)

Jörg, du bist ein Genie!

Vielen Dank, werde dein Forum definitiv weiterempfehlen und unterstützen.

31.05.2010 20:24