Philipp Ellenbeck: RewriteCond und RewriteRule bei Apache auf 1&1

Hallo Forum!

Ich habe bei einem PHP-Projekt auf einem 1&1 Server ein Problem.
Ich möchte dort die RewriteEngine nutzen, im Prinziep auch kein Problem.
Allerdings weiss ich nicht, wi ich die RewriteCond richtig angeben muss.

Zur Zeit habe ich es wie folgt:
RewriteEngine on
RewriteCond %{REQUEST_URI} (.*)/(.*)/(.*)/(.*)/(.*)/default.html$
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/default.html$ /vdir/index.php?nav=$1&ud=$2&uud=$3&limit=$4&job_id=$5

Nun kann es aber sein, dass nur die ersten beiden $ übergeben werden.
Ruft man also die URL /test/test2/default.html auf, gibt der Server richtiger Weise einen 404-Fehler aus. /test/test2/0/0/0/default.html wäre hier wohl besser gewesen.

Wie kann man dies der Condition beibringen, auch zu greifen, wenn nur 2 oder 3 der insgesmmt 5 Variablen übergeben werden/wurden?

Vielleicht so?
RewriteCond %{REQUEST_URI} /(.*/)(.*/)(.*/)(.*/)(.*/)default.html$
RewriteRule /(.*/)(.*/)(.*/)(.*/)(.*/)default.html$ /vdir/index.php?nav=$1&ud=$2&uud=$3&limit=$4&job_id=$5

Danke und Gruß

  1. Moin!

    RewriteEngine on
    RewriteCond %{REQUEST_URI} (.*)/(.*)/(.*)/(.*)/(.*)/default.html$
    RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/default.html$ /vdir/index.php?nav=$1&ud=$2&uud=$3&limit=$4&job_id=$5

    Nun kann es aber sein, dass nur die ersten beiden $ übergeben werden.
    Ruft man also die URL /test/test2/default.html auf, gibt der Server richtiger Weise einen 404-Fehler aus. /test/test2/0/0/0/default.html wäre hier wohl besser gewesen.

    Warum so kompliziert? Du willst im Prinzip, dass dein gesamter URL-Baum, der sich aus einem oder mehreren Verzeichnissen zusammensetzt und auf "default.html" endet, auf ein einziges Skript gemappt wird.

    Dann mach das doch auch einfach:
    RewriteRule default.html$ /vdir/index.php

    In deiner PHP-Datei kannst du dann beispielsweise $_SERVER['REQUEST_URI'] abfragen und die angeforderte URL ganz nach Belieben auseinandernehmen.

    Es ist vielleicht nicht verkehrt, in einer oder mehrerer RequestCond-Zeilen noch zu prüfen, ob eines dieser virtuellen Verzeichnisse angefordert wurde. Insbesondere sollte vielleicht geprüft werden, dass "/vdir/" gerade _nicht_ angefordert wurde. Das Überlappen von virtuellen und realen URLs wäre sonst vielleicht etwas ungünstig.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|