gregor walther: mod_rewrite und htaccess

Ich habe für eine Webseite eine .htaccess- Datei, die alle Zugriffe auf das Verzeichnis, in dem sie liegt, auf ein PHP- Skript umleitet;

Bilder und andere Medien habe ich mit der Zeile

RewriteRule !.(gif|jpg|png|css|mp3)$ /www/htdocs/verzeichniss/start.php4

wohl ausgenommen.
so weit, so gut, funktioniert auch alles wunderbar.

Ich habe jetzt allerdings das Problem, das ich über die URL Parameter  übergebe, u.a. auch die Namen von einzubindenden Bilddateien inkl. Endung. Das daß Probleme geben könnte, hatte ich schon befürchtet, nur hat auf meinem Testserver das ganze sehr gut funktioniert; auf dem live-Server allerdings wird in so einem Fall versucht, auf die URL direkt zuzugreifen, die mod-rewrite Umleitung greift nicht mehr.

Kann ich das Verhalten irgendwie — z.B. über .htacccess — beeinflussen?

  1. hi,

    Ich habe jetzt allerdings das Problem, das ich über die URL Parameter übergebe, u.a. auch die Namen von einzubindenden Bilddateien inkl. Endung.

    um den query string nach dem rewriten wieder anzuhängen gibt es das flag qsa, query string append.

    probiere also mal:

    RewriteRule !.(gif|jpg|png|css|mp3)$ /www/htdocs/verzeichniss/start.php4 [qsa]

    gruss,
    wahsaga

    1. Moin!

      um den query string nach dem rewriten wieder anzuhängen gibt es das flag qsa, query string append.

      Nö. Der Querystring wird von mod_rewrite überhaupt nicht beeinflusst. Es wird der Request genommen, vorne der Host und hinten der Parameter abgeschnitten, und damit dann in den RewriteRules verglichen, ob der Regex paßt.

      Dadurch wird Pfad und Dateiname möglicherweise verändert. Und wenn keine Regeln mehr geprüft werden, wird das Ergebnis wieder zusammengesetzt und dann "ausgeführt".

      Wenn man also
      RewriteRule ^.*$ /master.php
      macht, dann kriegt das PHP-Skript immer alle gesendeten Daten - egal welche URL (wegen Rewriting), egal ob POST oder GET, egal ob mit oder ohne Cookie.

      QSA ist dann relevant, wenn man mit der RewriteRule im _Querystring_ was verändern bzw. was anhängen will. Beziehungsweise man sollte dann diesen Parameter ausprobieren, wenn das ursprünglich gewünschte sich trotz scheinbarer Korrektheit nicht realisieren läßt. Ich muß da zugeben, dass ich QSA noch nicht wirklich intensiv untersucht habe, weil ich es bislang noch nie gebraucht habe.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
    2. probiere also mal:

      RewriteRule !.(gif|jpg|png|css|mp3)$ /www/htdocs/verzeichniss/start.php4 [qsa]

      Dank Dir, aber das hat so auf Anhieb leider nicht geholfen.

      Gruss aus Berlin,

      gw.