Zum Gruße, Genosse!
Warum funktioniert folgende Weiterleitung für www.domain.de/index.php?article_id=1 auf www.domain.de nicht?
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index.php?article_id=1
Die URL-Parameter, d.h. der Teil hinterm Fragezeichen, tauchen nicht in REQUEST_URI auf, sondern stehen in QUERY_STRING. Das wird auch ausdrücklich in der Anleitung für RewriteCond bzw. REQUEST_URI erwähnt:
"REQUEST_URI: The path component of the requested URI, such as "/index.html". This notably excludes the query string which is available as as its own variable named QUERY_STRING."
Probiere es so:
RewriteCond %{THE_REQUEST} "[1]+ /index.php(?article_id=1)? HTTP/1."
RewriteRule ^index.php$ http://www.domain.de/? [R=301,L]
Auf diesem Weg schlägst du zwei Fliegen mit einer Klappe. Du vergleichst zum einen, ob URL-Parameter angegeben sind, und falls ja, ob's article_id=1 ist.
Zum zweiten stellst du sicher, dass nur direkte Anfragen für index.php betroffen sind. Das machst du zwar scheinbar auch in der RewriteRule-Zeile, allerdings kann sich der Wert, den RewriteRule zum Vergleich heranzieht, im Verlauf der .htaccess-Abarbeitung ändern. Durch direkten Vergleich der Browser-Anfrage gehst du sicher, dass auch wirklich nur das geprüft wird, was du prüfen möchtest, nämlich die "falschen" Anfragen von außen - und nicht das, was dein Server daraus macht.
A-Z ↩︎