Automatische Weiterleitung je nach User mit PHP & .htaccess?
Juan P. Saenz
- php
0 Lactrik0 Sven Rautenberg0 Juan P. Saenz0 lulu
Hallo World!
ich stehe vor folgendem Problem:
ich habe einen Verzeichnis "/dir" mittels .htaccess geschützt; N User haben dort Zugangsberechtigung. Nun möchte ich, dass User A nach /dir/a/index.html; User B nach /dir/b/index.html etc. umgeleitet werden. Ich habe es mir so vorgestellt, dass ich eine php Datei schreibe, der die Variable [$ENV{'REMOTE_USER'] liest und die umleitung vornimmt. Sie sieht so aus:
--
<?
if ($ENV{'REMOTE_USER'}=userA) {
echo '<meta http-equiv="refresh" content="0;URL=/dir/a/index.html">';
}
if ($ENV{'REMOTE_USER'}=userB) {
echo '<meta http-equiv="refresh" content="0;URL=/dir/b/index.html">';
}
else {
echo 'dieser user hat keine startseite';
echo $ENV{'REMOTE_USER'};
}
?>
--
es will aber nicht funktionieren, irgendwie werden alle anfragen an dem ersten Verzeichnis umgeleitet, in diesem Beispiel also nach "/dir/a/". Was mache ich denn falsch, bzw. wie kann ich denn mir einem php Script die Variable [$ENV{'REMOTE_USER'] auslesen? Any Ideas?
Danke!
Juan P. Saenz
Hallo,
ich habe einen Verzeichnis "/dir" mittels .htaccess geschützt; N User haben dort Zugangsberechtigung. Nun möchte ich, dass User A nach /dir/a/index.html; User B nach /dir/b/index.html etc
Was du brauchst, findest du unter dem Begriff "mod_rewrite". Einfach mal im Forumsarchiv danach suchen. Erfordert aber die Unterstützung seitens PHP (muss also von dir / deinem Provider aktiviert werden).
Viele "fertige" Webspaces haben das nicht aktiviert, daher würde ich bei Logins immer auf PHP in Verbindung mit Sessions setzen (statt htaccess), dann hat man das Problem gar nicht erst.
Grüße
Lars
Hi Lars,
Danke für Deine Antwort!
Was du brauchst, findest du unter dem Begriff "mod_rewrite". Einfach mal im Forumsarchiv danach suchen. Erfordert aber die Unterstützung seitens PHP (muss also von dir / deinem Provider aktiviert werden).
Ich werde mich da schlau machen und gff. das Ding aktivieren (Im PHP oder doch Apache? "mod_rewrite" erscheint unter "Loaded Modules" in der Apache-Sektion der "phpinfo()"; also schon aktiv oder?)
Viele "fertige" Webspaces haben das nicht aktiviert, daher würde ich bei Logins immer auf PHP in Verbindung mit Sessions setzen (statt htaccess), dann hat man das Problem gar nicht erst.
Das wäre auch eine Möglichkeit, oder halt mit 'nem PERL Script, da gibt es viele und sehr gute fertige Scripts; ich wollte es aber doch gerne so einfach wie möglich halten; zumal .htaccess einem sehr guten Schutz bietet... wenn es aber doch nicht so einfach geht werde ich dann doch auf einem ScriptModul zurückgreifen.
Grüße
Lars
Saludos,
Juan Pablo
Moin!
es will aber nicht funktionieren, irgendwie werden alle anfragen an dem ersten Verzeichnis umgeleitet, in diesem Beispiel also nach "/dir/a/". Was mache ich denn falsch, bzw. wie kann ich denn mir einem php Script die Variable [$ENV{'REMOTE_USER'] auslesen? Any Ideas?
Zwei Dinge sind falsch:
Erstens heißt die Variable $_ENV, nicht $ENV.
Zweitens wird ein _VER_GLEICH_ (zwei Silben) mit "linkeseite == rechteseite" (zwei Gleichheitszeichen!) durchgeführt, während eine Zuweisung nur ein einzelnes Gleichheitszeichen erfordert.
- Sven Rautenberg
@Sven: Danke für deine Tips!
@All:
Zwei Dinge sind falsch:
Erstens heißt die Variable $_ENV, nicht $ENV.
ok, habe ich geändert, danke!
Zweitens wird ein _VER_GLEICH_ (zwei Silben) mit "linkeseite == rechteseite" (zwei Gleichheitszeichen!) durchgeführt, während eine Zuweisung nur ein einzelnes Gleichheitszeichen erfordert.
Das würde erklären, warum ich immer zum ersten Verzeichnis befördert werde; ("if a=b" wäre also nichts anderes als "a=b") Wie auch immer, es funktioniert immer noch nicht; jetzt bekomme ich immer "Dieser User hat keine Startseite" zurück, also meine Definition nach "else" (evtl. immer noch kein Auslesen der "REMOTE_USER"-Variable?) das Script nochmal ganz:
--
<?
if ($_ENV{'REMOTE_USER'} == userA) {
echo '<meta http-equiv="refresh" content="0;URL=/dir/a/index.html">';
}
if ($_ENV{'REMOTE_USER'} == userB) {
echo '<meta http-equiv="refresh" content="0;URL=/dir/b/index.html">';
}
else {
echo 'dieser user hat keine startseite';
echo $_ENV{'REMOTE_USER'};
}
?>
--
Wenn jemandem was einfällt wäre ich sehr dankbar!
Juan P. Saenz
- Sven Rautenberg
Huhu Juan
Dein Skript kann noch entscheidend verbessert werden.
<?
short Tags sind weniger gut, da diese Option nicht vorausgesetzt werden kann. Besser immer "<?php" schreiben.
if ($_ENV{'REMOTE_USER'} == userA) {
hier fehlen Anführungen, es soll vermutlich ein String "userA" verglichen werden und nicht die Konstante userA, oder?
echo '<meta http-equiv="refresh" content="0;URL=/dir/a/index.html">';
client-seitige Techniken zur Weiterleitung sind sehr schlecht, hier besser einen entsprechenden Header schicken.
(Dannach das Skript mit exit() beenden.)
}
if ($_ENV{'REMOTE_USER'} == userB) {
echo '<meta http-equiv="refresh" content="0;URL=/dir/b/index.html">';
}else {
hier vermutlich ein logischer Fehler: in dieses "else" wird auch verzweigt, wenn der 'REMOTE_USER' == 'userA' ist.
echo 'dieser user hat keine startseite';
echo $_ENV{'REMOTE_USER'};
}
Was machst Du wenn noch weitere User hinzukommen?
Hier würde sich zur Lösung der Aufgabe ein Switch anbieten, oder noch besser ein Array der Form 'userX' => 'target'.
Dann muss das Programm nur "schauen", ob es zum aktuellen User ein
Element im Array gibt (Weiterleitungsziel) und ihn entsprechend weiterleiten.
Ansonsten gibt es z.B. ein Default-Ziel, oder Fehlermeldung.
Array-Indizes werden in PHP üblicherweise in []-Klammern gesetzt.
{}-Klammern funktionieren zwar auch, sind aber eher Perl-Syntax o.ä. wenn ich mich nicht irre?
?>
Viele Grüße
lulu
Hoho lulu
Dein Skript kann noch entscheidend verbessert werden.
jö, danke für deine Tipps!
<?
short Tags sind weniger gut, da diese Option nicht vorausgesetzt werden kann. Besser immer "<?php" schreiben.
gemacht
if ($_ENV{'REMOTE_USER'} == userA) {
hier fehlen Anführungen, es soll vermutlich ein String "userA" verglichen werden und nicht die Konstante userA, oder?
doch, userA bleibt konstant, es sind nur wenige User, die Zugang zu dem besagten Bereich haben werden; immer wenn ´n neuer kommt, füge ich die Paar Zeilen hinzu und das war´s dann
echo '<meta http-equiv="refresh" content="0;URL=/dir/a/index.html">';
client-seitige Techniken zur Weiterleitung sind sehr schlecht, hier besser einen entsprechenden Header schicken.
ja, habe ich mit
header ("Location :/dir/a");
realisiert, danke.
Was machst Du wenn noch weitere User hinzukommen?
wie gesagt, den entsprechenden Eintrag hinzufügen, es sollen aber max. 10 - 15 Users sein, also kein Problem.
Übriegens hatte alles nicht funktioniert, weil bei mir die Variable nicht "$_ENV{'REMOTE_USER'}", sondern "$_SERVER{'REMOTE_USER'}" heisst...
jetzt tut´s :-)
Saludos,
Juan Pablo