Christian Seiler: "?" - Weiterleitung

Beitrag lesen

Hallo Dominik,

Habe zu wenig Ahnung von htaccess.

http://httpd.apache.org/docs/misc/rewriteguide.html
</archiv/2002/12/32853/#m178830>

Das dürfte weiterhelfen.

Ich erstelle also im Hauptverzeichnis von http://www.testx.de
die .htaccess-Datei.

Und diese muss dann folgenden Inhalt enthalten?

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  !^/index.php.*
RewriteRule ^(.*)         index.phpinhalt=$1  [L]

Fast. (Da fehlt ein Fragezeichen zwischen "php" und "inhalt") Das RewriteEngine On bewirkt, dass überhaupt das Umschreiben und URLs aktiviert wird. Das RewriteBase / ist für die .htaccess zwingend notwendig - das / heißt in diesem Fall, dass alle Zeil-URLs innerhalb dieses Verzeichnisses liegen. (Mal angenommen Du würdest im Verzeichnis http://www.example.com/test/ etwas umschreiben wollen, dann müßtest Du RewriteBase /test nehmen) Das RewriteCond stellt eine Bedingung für die nächste Umschreibe-Regel dar - in dem Fall, dass die Aufgerufene URL nicht mit index.php anfängt. Das RewriteRule ist selbst die Regel, das sagt, dass alles nach index.php?inhalt=... umgeschrieben werden soll.

Wenn jetzt jemand http://www.example.com/impressum aufruft, dann ist es so, als ob er http://www.example.com/index.php?inhalt=impressum aufruft. Wenn jetzt jemand dagegen http://www.example.com/ein/schoenes/verzeichnis aufruft, dann ist es so, als ob er http://www.example.com/index.php?inhalt=ein/schoenes/verzeichnis aufruft.

Achtung: Wenn jemand http://www.example.com/suche?was=SELFHTML aufruft, dann wird _nur_ http://www.example.com/index.php?inhalt=suche aufgerufen, alles nach dem Fragezeichen wird abgeschnitten. [1]

Muss ich auch ein Verzeichnis namens /impressum haben?

Nein. Es muss lediglich eine index.php existieren.

Viele Grüße,

Christian

[1] Um dieses Problem zu umgehen, habe ich aber eine Funktion geschrieben, (die brauche ich selbst auch) die Du in Deinen PHP-Skripten verwenden kannst.

------------------------- schnipp -------------------------

// recreate the query string that was removed by mod_rewrite
function recreate_query_string () {
        // get query string
        $query_string = substr ($_SERVER['REQUEST_URI'], strpos ($_SERVER['REQU
        // now separate the parameters
        $params = explode ('&', $query_string);
        // traverse params
        foreach ($params as $param) {
                // get value
                list ($k, $v) = explode ('=', $param);
                // if key is empty, ignore it
                if (empty ($k)) {
                        continue;
                }
                // add those entries to the get superglobal
                $_GET[$k] = $v;
        }
}

// now recreate the query string
if (strpos ($_SERVER['REQUEST_URI'], '?') !== false) {
        recreate_query_string ();
}

------------------------- schnapp -------------------------

Wenn Du diesen Codeschnippsel an den Anfang Deiner index.php kopierst, funktionieren dann URLs wie http://www.example.com/suche?was=SELFHTML wieder - dann sieht es nämlich für den darauffolgenden Code so aus, als ob http://www.example.com/index.php?inhalt=suche&was=SELFHTML aufgerufen würde.

--
Hast Du einen Beitrag? Nur her damit!
http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[