[gelöst] http-auth für symlink?
am 03.11.2009 - 19:35 Uhr in
'n Abend miteinander.
Ich hab' hier mal eine etwas kniffligere Aufgabe:
Ich betreibe eine D6-Installation, welche zwei Webseiten bedient: example.com/ und example.com/foo. Der Installations-/Configurationsanleitung entsprechend habe ich einen symlink von '/foo' auf '.' angelegt und beide Seiten erfolgreich zum Laufen gebracht. Nun hätte ich gerne, dass man sich für den Besuch von example.com/foo zunächst mit http-auth anmelden muss, für den Zugriff auf example.com sollen aber keine Zugangsdaten erforderlich sein.
Ich kann jetzt ja schlecht eine .htaccess-Datei in den Symlink legen :-) Und wenn ich './.htaccess' so konfiguriere, dass sie http-auth verlangt, dann kann niemand mehr ohne Kennwort auf example.com zugreifen.
Hat jemand eine Idee, wie ich das hinbekommen könnte?
Danke im Voraus,
forschi
Edit: ich habe schon mit dem Modul 'secure pages' geliebäugelt, das tut aber nicht so ganz, wie ich mir das vorstelle: zwar kann ich mich vermittels http-basic anmelden, jedoch kann ich mich dann nicht mehr abmelden.
- Anmelden oder Registrieren um Kommentare zu schreiben
<Location>
am 04.11.2009 - 10:47 Uhr
Ich kann jetzt ja schlecht eine .htaccess-Datei in den Symlink legen :-)
Alles was du in
.htaccess
einstellen kannst, kannst du auch in einem geeigneten<Location>
-Abschnitt direkt in derhttpd.conf
einstellen.... welche zwei Webseiten bedient: example.com/ und example.com/foo. Der Installations-/Configurationsanleitung entsprechend habe ich einen symlink von '/foo' auf '.' angelegt und beide Seiten erfolgreich zum Laufen gebracht.
Funktionieren denn auch
example.com/foo/foo
,example.com/foo/foo/foo
undexample.com/foo/foo/foo/foo
? Falls ja, ist das schlimm? Falls es schlimm ist, dann verwende anstatt Symlinks dieAlias
-Direktive.--
Mist, ich wusste, ich hatte
am 04.11.2009 - 11:11 Uhr
Mist, ich wusste, ich hatte was vergessen:
Die Installation liegt auf einem Webspace bei 1und1. Ich komm' also nur an die .htaccess-Datei ran, nicht an die httpd.conf. Ansonsten hatte ich auch schon mit DirectoryMatch oder LocationMatch geliebäugelt, das geht aber auch nur über die Server-Config und nicht in der .htaccess-datei.
Lustig, aber verstädnlich ist, dass example.com/foo/foo/foo... auch geht. Stören tut das allerdings nicht weiter, solange ich den Zugriff beschränken kann, egal wie viele /foo's angehängt werden.
Danke trotzdem für die Ideen. Sie helfen auf jeden Fall, das Problem besser einzuschätzen und weiter einzugrenzen.
Ersetze den Symlink durch
am 04.11.2009 - 11:23 Uhr
Ersetze den Symlink durch ein Verzeichnis. Dort speicherst du dann folgende
index.php
:<?php
chdir('..');
include './index.php';
?>
--
Das klingt interessant, tut
am 04.11.2009 - 11:53 Uhr
Das klingt interessant, tut jedoch leider nicht.
Zum einen kann ich dann keine updates mehr für /foo ausführen, weil ich dazu /foo/update.php aufrufen muss. Zum anderen werden die Parameter nicht an die index.php von Drupal übergeben. Selbst folgender Schnipsel vermag das Problem nicht zu lösen:
<?php
chdir ('..');
$query = str_replace("/intern/","",$_SERVER['REQUEST_URI']);
if(strcmp($query,"update.php") == 0){
include './update.php';
}
else{
$_GET['q'] = $query;
include './index.php';
}
?>
forschi schrieb Zum einen
am 04.11.2009 - 12:46 Uhr
Zum einen kann ich dann keine updates mehr für /foo ausführen, ...
Könnte man durch eine analoge
update.php
hinbekommen.Zum anderen werden die Parameter nicht an die index.php von Drupal übergeben.
Parameter werden ja nicht im eigentlichen Sinne an die
index.php
übergeben, sie landen in bestimmten Variablen. Diese Varaiblen sind verfügbar unabhängig davon ob ein Script direkt ausgeführt wird oder von einem anderen Script eingebunden wird.Wenn du CleanURLs verwendest, dann brauchst du im Verzeichnis
foo
natürlich eine passende.htaccess
. Zum Testen würde ich aber CleanURLs vorerst deaktivieren. Eventuell brauchst auch eine eigene Konfiguration im sites-Verzeichnis deiner eigentlichen Installation (um eine $base_url angeben zu können, vieleicht hast du sie auch schon für die Datenbankkonfiguration).--
Danke, die .htaccess hat
am 04.11.2009 - 16:16 Uhr
Danke, die .htaccess hat natürlich gefehlt. Die eigene Konfigurationsdatei ist vorhanden, sonst würde die Seite auch mit dem symlink nicht funktionieren.
Das Problem ist jetzt, dass die Seite ansich zwar funktioniert, Themes werden jedoch weiterhin in example.com/foo/sites/example.com.foo/themes gesucht. Auch JavaScript-Dateien werden über eine solche URI eingebunden, weswegen auch die Variante mit dem Symlink anstandslos funktioniert.
Selbst das Umstellen von öffentlichem Dateizugriff auf privaten Dateizugriff ändert hier nichts. Auch das Leeren und Deaktivieren sämtlicher Caches bringt keinen Erfolg.
Die base_url hab' ich in der Config eingetragen und auch die rewritebase in der .htaccess-Datei ist auf /foo geändert (auch '/' ändert nichts).
Ein Symlink von /foo/sites
am 04.11.2009 - 16:43 Uhr
Ein Symlink von
/foo/sites
nach/sites
sollte da weiterhelfen. Bei fehlendemfiles
-Verzeichnis ebenfalls.--
Läuft!
am 04.11.2009 - 23:15 Uhr
Ein Symlink von
/foo/sites
nach/sites
sollte da weiterhelfen. Bei fehlendemfiles
-Verzeichnis ebenfalls.Um es mit den Worten von Bart Simpson zu sagen: "Uh, perverso!".
Hatte das Mittagessen doch glatt mein Hirn eingeschläfert.
Funktioniert bisher tadellos. Hier nochmal die Zusammenfassung:
<?php chdir ('..');include './index.php';?>
bzw.<?php chdir ('..');include './update.php';?>
example.com/foo/sites
nachexample.com/sites
(sonst gibt's keinen Zugriff auf hochgeladene Dateien)example.com/foo/themes
nachexample.com/themes
(Grafiken und CSS-Dateien werden direkt eingebunden)example.com/foo/misc
nachexample.com/misc
(js-Dateien, die evtl. im header eingebunden werden)example.com/foo/modules
nachexample.com/modules
(hier liegen noch einige .css-Dateien)Und dann natürlich die gewünschte Zugriffsbeschränkung in der .htaccess-Datei in /foo einrichten.
Und schon geht sie ab, die Luzi.
Besten Dank.
Nachtrag: in /sites/example.com.foo/ muss ebenfalls eine .htaccess-Datei erstellt werden, die eine http-auth Autorisierung durchführt, sonst stehen alle hochgeladenen Dateien, frei zum Download zur Verfügung! Alternativ können natürlich auch nur die Dateien geschützt werden, aber dann ist noch ein unautorisierter Zugriff auf die Module möglich. Sicher kein übermäßiges Problem, aber auch nicht grade das, was man von einer sicheren Seite erwartet.
@traxer: danke für die
am 04.11.2009 - 23:54 Uhr
@traxer: danke für die Hilfe! Ich bin nochmal über ein paar Darstellungsfehler gestolpert. Da haben die Symlinks nach example.com/themes und example.com/modules gefehlt. Vermutlich hätte ich sicherlich auch noch irgendwann Probleme bekommen, weil auch die .js-Dateien im HTML-Quelltext stehen. Ich denke, dass mal /scripts außer Acht lassen kann, weil sie nicht im Betrieb benötigt werden, /tmp wird nur php-intern verwendet. Ebenso /includes und die Profile aus /profiles.
Man fragt sich natürlich, ob man /profiles und /scripts überhaupt auf dem Webserver braucht, nachdem Drupal installiert ist...