Erich Honecker: HTACCESS-Weiterleitungsproblem

Beitrag lesen

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.


  1. A-Z ↩︎