• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mod_rewrite: Umleitung nach Aufruf eines Skripts

Sabbel

Neues Mitglied
Hallo zusammen!

Ich wüsste gern, wie man es hinbekommt, dass nach Aufruf eines Skripts unter example.org/skript/ wieder auf die Startseite example.org umgeleitet wird.

Ein konkretes Beispiel isthttp://chatroulette.com/ chatroulette.com. Klickt man dort unten links auf "Colorful", wird chatroulette.com/home/set_theme/random/ aufgerufen, wodurch ein zufälliges Theme ausgewählt wird. Anschließend landet man aber wieder auf chatroulette.com.

Über Hilfe würde ich mich sehr freuen.

LG
Sabine
 
Werbung:
mod_rewrite ist dafür nicht direkt zuständig. mod_rewrite unterstützt dich nur dabei diese URL /script/ oder /beispiel/ zu bilden und darüber eine bestimmte Datei mit bestimmten Parametern aufzurufen. Am Beispiel von chatroulette gesprochen: diese URL ruft eine Datei auf die wiederum irgendwas macht (ich nehme an sie speichert ein Cookie mit dem Vermerk, welches Template genutzt werden soll) und leitet dann auf die Startseite weiter. In php ausgedrückt:

Code:
<?php
machIrgendwas();
header("Location /index.html");
?>
 
Danke für deine Antwort. Kann man das auch ohne Cookie bewerkstelligen, sofern das Ergebnis des Skripts nur für die auf den Aufruf folgende Seite gebraucht wird?

Um beim Beispiel zu bleiben: Der Aufruf von chatroulette.com/home/set_theme/random/ wählt ein zufälliges Theme aus, das dann unter chatroulette.com angezeigt wird. Sobald eine andere Unterseite aufgerufen wird, wird das ausgewählte Theme wieder verworfen. (Mir ist klar, dass das wenig sinnvoll ist, aber es ist ja nur ein Beispiel.)
 
Werbung:
Klar, ginge das. Nur wie Du schon richtig bemerkt hast verliert sich die Templateeinstellung beim nächsten Klick. Bringt somit nicht wirklich etwas.
 
Ja, für die Sache mit den Themes wäre es Unsinn, aber es gibt ja noch andere Anwendungsfälle.

Wie muss denn dann meine .htaccess aussehen? Hier mal, was ich bisher habe:

Code:
RewriteEngine On
RewriteBase /
RewriteRule ^skript/(.*)/$ index.php?skript=$1 [L]
Damit kann ich schon mal example.org/index.php?skript=xyz über example.org/skript/xyz/ aufrufen. (Was mir dabei noch fehlt, ist, dass auch der Aufruf von example.org/skript/xyz (ohne Schrägstrich am Ende) funktioniert und dass man bei Eingabe von example.org/index.php?skript=xyz auf example.org/skript/xyz/ weitergeleitet wird.)

Wie kriege ich nun die Weiterleitung nach Aufruf des Skripts auf example.org hin?
 
Zuletzt bearbeitet:
Das hab ich doch oben beschrieben. Du hast die Zieldatei index.php welche nun diese Anfrage verarbeiten muss. In der Datei kannst Du dann eine Weiterleitung zurück zur Startseite einrichten (siehe oben).
 
Werbung:
Ach so, ausschließlich mit mod_redirect geht das gar nicht. Ok, dann vielen Dank für deine Hilfe und ein schönes Wochenende.

EDIT: Kannst du mir noch bei dem in Klammern beschriebenen Problem weiterhelfen?

EDIT2: Das klappt leider nicht. "Warning: Cannot modify header information - headers already sent"
 
Zuletzt bearbeitet:
Hallo,

vielleicht so
Code:
RewriteEngine On
RewriteBase /
RewriteRule index.php?skript=(.*)$ skipt/$1/  
RewriteRule ^skipt/(.*)/$ index.php?skript=$1 [L]
RewriteRule ^skipt/(.*)$ index.php?skript=$1 [L]

Cheffchen
 
EDIT: Kannst du mir noch bei dem in Klammern beschriebenen Problem weiterhelfen?

Code:
RewriteRule ^skipt/(.*) index.php?skript=$1 [L]

EDIT2: Das klappt leider nicht. "Warning: Cannot modify header information - headers already sent"

Vor header() darf nichts an den Browser ausgegeben werden. Auch keine Session oder ein Cookie. Informier dich über diese Meldung, da gibt es genügend Hinweise im Web dazu.
 
Werbung:
Code:
RewriteEngine On
RewriteBase /
RewriteRule index.php?skript=(.*)$ skript/$1/  
RewriteRule ^skript/(.*)/$ index.php?skript=$1 [L]
RewriteRule ^skript/(.*)$ index.php?skript=$1 [L]

Code:
RewriteRule ^skript/(.*)$ index.php?skript=$1 [L]
funktioniert.
Code:
RewriteRule index.php?skript=(.*)$ skript/$1/
funktioniert leider nicht.

Code:
RewriteRule ^skript/(.*) index.php?skript=$1 [L]

Hast du das eine Dollarzeichen absichtlich weggelassen?

Vor header() darf nichts an den Browser ausgegeben werden. Auch keine Session oder ein Cookie. Informier dich über diese Meldung, da gibt es genügend Hinweise im Web dazu.

Dann wird es wohl nicht gehen, weil sich HTML- und PHP-Code abwechseln. :sad:
 
Ja, denn das $-Zeichen steht an der Stelle als Markierung für das Ende der URL. Wenn man es weglässt ist die URL völlig offen. Es ist egal, ob sie mit oder ohne / endet.

Ich bezweifel, dass header() bei dir deswegen nicht geht. Wenn Du die URL aufrufst nur um eine Weiterleitung vorzunehmen kannst Du darüber ganz leicht auch eine völlig andere Datei aufrufen die wiederum nichts außer die header()-Weiterleitung enthält.
 
Ja, denn das $-Zeichen steht an der Stelle als Markierung für das Ende der URL. Wenn man es weglässt ist die URL völlig offen. Es ist egal, ob sie mit oder ohne / endet.

Aber dann wäre ja auch example.org/skript/xyzundirgendeintext gültig und würde example.org/index.php?skript=xyz aufrufen. Darum ist es mir lieber beide Versionen exakt zu behandeln. Von Cheffchen:

Code:
RewriteEngine On
RewriteRule ^skript/(.*)/$ index.php?skript=$1 [L]
RewriteRule ^skript/(.*)$ index.php?skript=$1 [L]
Nur die Weiterleitung von example.org/skript/xyz nach example.org/xyz/ habe ich nicht nicht hinbekommen.

Ich bezweifel, dass header() bei dir deswegen nicht geht. Wenn Du die URL aufrufst nur um eine Weiterleitung vorzunehmen kannst Du darüber ganz leicht auch eine völlig andere Datei aufrufen die wiederum nichts außer die header()-Weiterleitung enthält.

Nachdem ich die "headers already sent"-Warnung aus dem Weg geräumt hatte, erschien diese Fehlermeldung:

Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
EDIT: Habe es ausprobiert, meine Annahme stimmt nicht. Mit deinem Vorschlag funktioniert example.org/skript/xyzundirgendeintext nicht, example.org/skript/xyz/ auch nicht, ausschließlich example.org/skript/xyz geht.
 
Zuletzt bearbeitet:
Werbung:
Das "geht" schon, nur wird bei "meiner" Variante an dein Script eben "xyz" wenn Du "xyz" aufrufst und "xyz/" wenn Du "xyz/" aufrufst. Ich weiß ja nicht was Dein Script dort dann verarbeitet.

Die Idee von Cheffchen geht durchaus ebenso. Nur Frage ich mich wieso Du noch eine Weiterleitung auf die URL mit Slash einrichten willst? Solange Du nur Links bereitstellst die ein / am Ende haben ruft auch niemand das Ganze ohne / auf.
 
Die Weiterleitung hätte ich gern, damit jede Ressource auch tatsächlich genau einer URL zugeordnet ist.
 
Zurück
Oben