Dominik: "?" - Weiterleitung

Hallo!

Ich habe mal irgendwo gelesen, dass ich mit Hilfe von htaccess eine Weiterleitung auf ein PHP-Script inkl. Variablen machen kann.

z.b. www.test.de/impressum

--> weitergeleitet auf:

www.test.de/index.php?inhalt=impressum&farbe=rot&blabla=XXX

geht das? Oder kann man zumindest auf das Fragezeichen verzichten?

Danke!

Gruss, Dominik

  1. Hallo Dominik,

    z.b. www.test.de/impressum

    --> weitergeleitet auf:

    www.test.de/index.php?inhalt=impressum&farbe=rot&blabla=XXX

    geht das?

    Nein. Ich bezweifle, dass Du Eigentümer oder Webmaster der Stiftung Warentest bist, daher wirst Du keinen Zugriff auf ihr Webangebot haben. ;-)

    Im Ernst: Ja klar. Der Suchbegriff für das Archiv ist "mod_rewrite".

    Für Dich wäre

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI}  !^/index.php.*
    RewriteRule ^(.*)         index.php?inhalt=$1&farbe=rot&blabla=XXX  [L]

    die Lösung. (sofern es Dein Provider unterstützt.)

    Alternativ kannst Du auch nur bestimmte Seiten weiterleiten:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI}  ^/impressum$      [OR]
    RewriteCond %{REQUEST_URI}  ^/andereseite$    [OR]
    RewriteCond %{REQUEST_URI}  ^/nocheineseite$
    RewriteRule ^(.*)         index.php?inhalt=$1&farbe=rot&blabla=XXX [L]

    Oder kann man zumindest auf das Fragezeichen verzichten?

    Das ginge auch: (sogar ohne .htaccess)

    http://www.test.de/index.php/impressum

    Dann steht '/impressum' in $_SERVER['PATH_TRANSLATED']

    Viele Grüße,

    Christian

    --
    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:[
    1. Hallo Christian!

      Habe zu wenig Ahnung von htaccess. Oder wahrscheinlich bin ich zu blöd dazu. Ich kriege das nicht hin.

      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]

      Muss ich auch ein Verzeichnis namens /impressum haben?

      Vielen Dank!

      Gruss, Dominik

      1. 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:[
        1. Hallo,

          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]

          [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.

          Wie wäre es mit

          /-http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule
          | # 'qsappend|QSA' (query string append)
          | This flag forces the rewriting engine to append a query string part
          | in the substitution string to the existing one instead of replacing
          | it. Use this when you want to add more data to the query string via
          | a rewrite rule.

          Viele Grüße,

          Stefan

          1. Hallo Stefan,

            Wie wäre es mit
            [...]QSA[...]

            Oh - das habe ich ja komplett übersehen - das funktioniert sogar. Danke für den Tipp, den kann ich selbst gebrauhen.

            Viele Grüße,
            Christian

            --
            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:[
      2. Hallo!

        Habe zu wenig Ahnung von htaccess. Oder wahrscheinlich bin ich zu blöd dazu. Ich kriege das nicht hin.

        Was passiert denn genau? Weißt Du ob mod_rewrite verfügbar ist? Hast Du überhaupt einen Apachen?

        Grüße
        Andreas