"?" - Weiterleitung
Dominik
- php
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
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
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
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.
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
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
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