Seite 1 von 1

mod_rewrite: Trailing ?

Verfasst: 06.10.2008, 10:58
von Hube
Hallo zusammen,
ich habe folgendes Problemchen:

Aus "historischen Gründen" habe ich eingehende Links der Form

https://DOMAIN/index.html
https://DOMAIN/index.html?

Diese Links zeigen alle die Startseite an. "index.html" ist allerdings KEINE physikalische Datei auf meinem Server. Weil nun gerne hätte, daß alle Links auf meine Startseite gleich aussehen, nämlich https://DOMAIN/ (mit oder ohne Trailing Slash, da will ich mal nicht so sein :-) ) habe ich folgende Regel ersonnen:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.html$ https://%{HTTP_HOST} [R=301,L]

(Ob der Redirect auf HOST oder SERVER_NAME geht, ist in diesem Zusammenhang zweitrangig)

Es funktioniert auch mit folgendem Pferdefuß:
Der URL:
https://DOMAIN/index.html?
redirected auf
https://DOMAIN/?

nimmt also das häßliche Fragezeichen mit, obwohl der QUERY_STRING ja leer ist.

Hat hierfür jemand eine Lösung, das Fragezeichen los zu werden?


Vielen Dank und Viele Grüße von hier

Verfasst:
von

Verfasst: 06.10.2008, 11:22
von chris21
Ja.

Netterweise wirst Du das Fragezeichen durch ein Fragezeichen los:
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/index.html$ https://%{HTTP_HOST}? [R=301,L]

Verfasst: 06.10.2008, 12:27
von Hube
Funktioniert bestens.... Vielen Dank!
Verstanden hätte ich das aber schon noch gerne .... so ganz klar ist mir das nicht :-?

Verfasst:
von

Verfasst: 06.10.2008, 12:51
von Southmedia
Ein ? in der Rewriterule sorgt dafür, dass ein eventuell schon bestehender Querystring auf jeden Fall gelöscht wird - auch dein leerer mit dem ?.

Verfasst: 06.10.2008, 13:19
von Hube
Jetzt habe ich auch endlich DIE Zeile in der Doku gefunden, in der das ganz lapidar unter "One more note:" steht (und die ich bis jetzt wohl immer überlesen hatte) :
>When you want to erase an existing query string, end the substitution string with just the question mark.

Aha!! Man lernt doch nie aus, wie schön! :lol: Vielen Dank!