SSL nach Einloggen (https nach Login - http nach Logout)

Gesperrt
andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

SSL nach Einloggen (https nach Login - http nach Logout)

Beitrag von andreas-rgd » Di 22. Jun 2004, 10:45

ich wollte gern, dass die Seitenausgabe eines Users nach dem Login nach dem Anmelden generell das https-Protokoll (SSL) verwendet und nach dem Logout wieder zu http wechselt. Da der Content von Contenido per Programmfunktion aus der Datenbank geholt und angezeigt wird, funktioniert leider der Pfad-Expansionsmechanismus des Webservers nicht
Als einfache Lösung habe ich einen kleinen Patch in das Output der Menü-Module eingebaut ...

In der Hauptnavigation anstelle von:

$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));

dies hier:
-------------------------------------
foreach ($navitems as $key => $data) {

/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'TARGET', $data['target']);

if ($auth->auth["uid"] == "nobody")
{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
else
{
$tpl->set('d', 'HREF', $sess->url('https://localhost/cms/front_content.php?idcat='.$data['idcat']));
}

$tpl->next();

----------------------------------------
und horizontal in der Servicenavigation:
-----------------------------------------

if ($auth->auth["uid"] == "nobody")
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
else
{
echo '<td class="head_navigation"><a class="headnav" target="'.$target.'" href="https://localhost/cms/front_content.php?idcat='.$db->f(" idcat").'">'.$db->f("name").'</a></td>';
}
-------------------------------------

Die ausserdem eingefügte CSS-Klasse ist unwichtig und dient nur meiner persönlichen Ausgabeformatierung. Im Hauptmenü muss die Codeergänzung an den 3 Stellen gemacht werden, an denen die Ebenen durchsucht werden, in der Servicenavi nur an 1 Stelle. Unabhängig davon, ob man die Standardmodule verwendet, sollte man überall dort so vorgehen, wo interne Links generiert werden.

Statt des absoluten Pfads, den ich auf die Schnelle zum Testen angegeben habe, sollte man den Pfad natürlich aus einer Variablen holen, die in einem include-File steht, damit man nicht jedesmal das Modul ändern muss, wenn sich der Pfad ändert.

Falls man will, dass es sich nach dem Login auch bereits auf der aktuellen Seite auswirkt und nicht erst auf der nächsten aufgerufenen, fehlt noch etwas: die Seite nach dem Login anhand der akt. URI sofort neu laden.

Auf die Umleitung einer Content-Seite bzw. eines Artikels auf einen externen Link hat es keine Auswirkung und darf es auch nicht haben. Zumindest gilt das beim Öffnen eines neuen Fensters. Wie es sich bei der Anzeige innerhalb des Layouts verhält, habe ich noch nicht getestet.

Falls auf der https-Seite ein Formular in einem statisch aufgerufenen Pop-Up Fenster anzeigt, muss man darauf achten, dass dieses ebenfalls die Daten mit SSL überträgt.
Bei mir funktioniert es sehr gut - meine Webseite ist noch in der Entwicklung und läuft zum Testen noch auf localhost.

Falls ich einen Denkfehler gemacht habe oder jemand eine elegantere Lösung kennt, wäre ich für Hinweise dankbar.

Noch etwas: Hat jemand evtl. Erfahrung mit mod_rewrite? Ich hätte gern suchmaschinenfreundliche URL´s. Mit den regular expressions komme ich schon klar, denke ich. Sehr helfen würde mir jedoch ein praktisches Beispiel, wie ich das genau machen muss.

Grüsse von Andreas

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Re: SSL nach Einloggen (https nach Login - http nach Logout)

Beitrag von Halchteranerin » Di 22. Jun 2004, 12:16

andreas-rgd hat geschrieben: Noch etwas: Hat jemand evtl. Erfahrung mit mod_rewrite? Ich hätte gern suchmaschinenfreundliche URL´s. Mit den regular expressions komme ich schon klar, denke ich. Sehr helfen würde mir jedoch ein praktisches Beispiel, wie ich das genau machen muss.
Such mal im Forum danach, es wurde schon oefter darueber diskutiert. Vielleicht findest Du etwas Brauchbares dabei.

Gruss
Christa

Emceechen
Beiträge: 129
Registriert: Mi 26. Mai 2004, 11:18
Kontaktdaten:

Beitrag von Emceechen » Di 22. Jun 2004, 12:38

Zumindest für Google scheint das Problem laut folgendem Thread behoben zu sein:

http://www.contenido.de/forum/viewtopic.php?t=4776

andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

Beitrag von andreas-rgd » Di 22. Jun 2004, 16:36

Emceechen - danke für Deinen Hinweis, klingt was Google betrifft beruhigend. Aber es gibt ja auch noch andere Suchmaschinen. Ausserdem möchte ich gern mit mod_rewrite grundsätzlich klarkommen, kann auch andere Gründe zur Verwendung geben.

Christa aus Halchtal wo sonst ;o)) - Dir auch danke. Hab natürlich schon die diesbezügl. Forumsbeiträge gelesen, bevor ich meine Frage gepostet hatte. Dachte, ich kann vielleicht eine präzisere Antwort bekommen, weil alle das Thema nur anreißen und nicht abschliessend beantworten. Hatte auch in der "Apache Administration Bibel" (mitp Verlag) nachgeschaut. Der Autor, der nach eigener Aussage alles so total verständlich beschreibt in seinem Buch, erklärt zu mod_rewrite zwar die nötigen regular expressions - ansonsten hüllt er sich in Schweigen, was die Synthax betrifft und sein Beispiel ist irgendwie müllmässig. Also konnte ich nur erfahren, was ich über Ausdrücke z. B. von awk und anderen Unixtools eh schon wusste.

In diesem Forum geht es natürlich primär um Contenido und nicht um allg. IT-Wissen. Das ist mir schon klar. Aber ich glaube, da geht es anderen wie mir, man will auch grundsätzlich was dazulernen, z. B. mehr über die Apache-Config. Ist halt wie z. B. SSL ein Randthema, man muss nur eben auch mit der Umgebung eines Systems wie Contenido klarkommen, um alle relevanten Dinge draufzuhaben. Aber ok - ich gucke nochmal, ob ich was übersehen hab oder was Neues dazugekommen ist.

Grüsse von Andreas ... der Neue ;o)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Di 22. Jun 2004, 16:41

also, prinzipiell besteht der Trick mit mod_rewrite, die Parameter der front_content in den Filenamen zu packen.

Beispiel:

Aus "front_content.php?idcat=12" wird "index-a-12.html"

Einige Beispiel-Rules:

Code: Alles auswählen

RewriteRule ^index-a-([0-9]*).html$ front_content.php?idcat=$1 [PT]
RewriteRule ^index-g-([0-9]*).html$ front_content.php?idcatart=$1 [PT]
Mehr Infos über mod_rewrite findest du auch unter http://httpd.apache.org/

andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

Beitrag von andreas-rgd » Di 22. Jun 2004, 17:10

Timo - danke für den Tip. Ich denke, ich habs jetzt soweit verstanden. Und Christa hatte recht, ich hab insbesondere noch einen sehr aufschlussreichen Artikel gefunden, den ich wohl übersehen haben muss.
Sorry - poste nicht absichtlich Überflüssiges, weil ich zu faul wär zum Suchen.
Grüsse von Andreas

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Di 22. Jun 2004, 17:59

andreas-rgd hat geschrieben: Sorry - poste nicht absichtlich Überflüssiges, weil ich zu faul wär zum Suchen.
Das habe ich Dir auch nicht unterstellt. :) Aber manchmal uebersieht man manches, und da dachte ich, hilft Dir der Hinweis, dass Du suchen sollst, was er auch letztendlich tat. ;-) Ich kenne mich damit nicht aus, deswegen konnte ich Dir nichts Konkretes sagen, aber ich wusste eben, dass ich so etwas schon mal gelesen habe, auch konkretere Sachen dazu.

Und naechstes Mal bitte richtig lesen, das heisst HalchTER. ;-)

Gruss
Christa

Emceechen
Beiträge: 129
Registriert: Mi 26. Mai 2004, 11:18
Kontaktdaten:

Beitrag von Emceechen » Mi 23. Jun 2004, 08:18

Hallo zusammen,
mod_rewrite scheint ja doch ein öfter diskutiertes Thema zu sein. Ich dachte mir ich trag dazu mal ein bisschen grundsätzliches zusammen, vielleicht hilft das dem ein oder anderen ja zumindest im Ansatz.

Mit dem Apache Modul mod_rewrite können Sie ihre Websiten
suchmachinenfreundlicher machen. Eine Suchmaschine erkennt eine dynamische Webseite an dem "?" bei dem URL. Manche Suchmachinen geben schon bei der Sicht dieses Fragezeichen die Indexierung auf. Auch Dateien mit der Dateiendung *.php, oder *.pl werden oftmals
nicht (korrekt) indexiert.
Dies kann unter der Verwendung des mod_rewrite verhindert werden. Das Ziel ist es, die "?", und die Wertzuweisungen als Parameter in dem URL durch einen "/" zu ersetzen.
Abgerundet kann dies noch dadurch werden, das die dynamischen Dateiendungen z.B. durch *.html oder *.shtml ersetzt werden.

Der URL, z.B. zu einem Newsskript sieht anfangs noch so aus

http://www.seite.de/news.php?nr=1

Besser wäre es natürlich, wenn der URL am Ende so aussehen würde.

http://www.seite.de/news/1.html

Zunächst muss definiert werden, wie, und was das mod_rewrite in dem
Fall an dem URL verändern soll. Zunächst einmal das Fragezeichen, es
soll durch einen / ersetzt werden. Die Dateiendung *.php soll komplett aus dem URL verschwinden, auch die Wertzuweisung des Parameters nr="" soll ganz ersetzt werden. Der Apache soll anhand des URL die entsprechende nr automatisch ermitteln, und an das Skript übergeben.

Zunächst muss die RewriteEngine auf on geschaltet werden. Danach wird die RewriteRule, die Regel definiert.

RewriteEngine on
RewriteRule ^news/(.*)\.html$ news.php?nr=$1

Das wirkliche Umschreiben des URL macht die RewriteRule. Mit ihr wird
die "Regel" definiert, nach welcher der URL verändert werden soll.
news/(.*)\.html$
Das (.*) nach news/ kann für alles stehen, es ist eine Art Platzhalter, der innerhalb des Regulären Ausdrucks wie eine Variable verwendet werden kann.
Da es der erste Platzhalter ist, wird es als Variable $1 definiert.
In unserem Beispiel ist die Variable die Nummer der News.
Durch einen\ getrennt steht die Dateiendung des Artikels,

Der URL sieht jetzt so aus.

http://www.seite.de/news/nummer.html

Das $ Zeichen definiert das Ende des Regulären Ausdrucks. Dahinter steht der "wirkliche" URL zu dem Skript, aus welchem das Ergebnis der Abfrage geholt wird, und über den anscheinenden URL ausgegeben wird.

/news.php?nr=$1

Das $1 steht wie gesagt für die Artikelnummer.
Und das ist auch schon alles. Anfragen werden jetzt über beide Adressen behandelt, zum einen direkt an das Skript, über den gewöhnlichen URL, oder über den vom mod_rewrite erzeugen URL.

Mit dem mod_rewrite lässt sich auf diese Art vieles machen. Wer die Möglichkeit hat, mit dem Modul zu arbeiten, der sollte diese auf jeden Fall wahrnehmen.


Auch hier gibt es noch ein paar nützliche Informationen:
http://www.at-web.de/tricky/dynamische-webseiten.htm

Ich hoffe ich konnte dadurch wenigstens ein bisschen behilflich sein. Schöne Grüße und frohes Schaffen weiterhin,
Emceechen

Emceechen
Beiträge: 129
Registriert: Mi 26. Mai 2004, 11:18
Kontaktdaten:

Beitrag von Emceechen » Mi 23. Jun 2004, 08:33

Habe gerade noch etwas gefunden das (finde ich) relativ einfach beschreibt wie es genau funktioniert und auch gute Beispiele zu den einzelnen RewriteRule's gibt. Bei Interessse hier der Link:

http://www.linux-magazin.de/Artikel/aus ... write.html

Gruß, Michael

andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

Bin begeistert

Beitrag von andreas-rgd » Mi 23. Jun 2004, 12:35

Ja ... super! Ich denke, mit diesen Hinweisen sollte jetzt eigentlich jeder, der über die Grundkenntnisse verfügt, auch mit mod_rewrite klarkommen. Die Abarbeitung der Rules bei jedem Seitenaufruf kostet natürlich auch Performance. Und das ist auch deshalb schade, weil Contenido nach meinem Eindruck mit vergleichsweise guten bis erträglichen Ladezeiten aufwarten kann - hab etliche Online-Sites daraufhin getestet. Wenn ich das URL-rewriting eingebaut hab, will ich mal messen, wieviel Performanceverlust das konkret ausmacht.

Emceechen: Danke auch für den Artikel, der ist gut.

HalchTERanerin :wink: : Hab mich keineswegs kritisiert gefühlt. Dein Hinweis war im Gegenteil goldrichtig.

Weils ein bisschen zum Thema passt, kleiner Tip zu regular expressions: Wer einen Rootserver bzw. Shellzugriff oder hat oder auf localhost entwickelt, sollte sich vielleicht auch mal das Unix-Tool awk ansehen (auch für Windows verfügbar). Das ist ein genialer kleiner Parser für "(Multi) -suchen und -ersetzen" pur. Man kann sich damit superkompakte Miniprogramme schreiben zum automatisierten Ändern von in Dateien abgelegten Parametern, Pfaden oder was auch immer. Vorteil: man kann ratzfatz den jeweiligen Minijob absetzen, ohne die Dateien überhaupt ansehen zu müssen. Das spart Zeit und vermeidet die bei händischen Änderungen möglichen Fehler. Klar geht das auch mit höheren Progsprachen, aber längst nicht so kompakt und einfach.

Also dann ... Euch einen schönen Tag noch
Grüsse von Andreas

andreas-rgd
Beiträge: 11
Registriert: Di 22. Jun 2004, 09:01
Wohnort: Köln
Kontaktdaten:

Ergänzung

Beitrag von andreas-rgd » Mi 23. Jun 2004, 20:53

Au weia, da hab ich was vergessen.

Auch wenn das Umschalten ins https-Protokoll auf diese Weise anscheinend bisher nicht auf Interesse stiess, der Vollständigkeit halber noch eine kleine Ergänzung ...

Auch im Login-Modul muss im <form> noch der Pfad ergänzt werden, damit auch die akt. Seite automatisch nach dem login zu https wechselt.

---------------------------------
if ($auth->auth["uid"] == "nobody")
{
?>
<tr>
<td style="height:22px; margin-top:4px; padding-bottom:0px; padding-left:5px;">
<form method="post" action="https://localhost/cms/front_content.php?idcatart=<?php echo $idcatart; ?>">
Benutzer: <input type="text" name="username" value="" size="10" maxlength="10" style="height:16px; font-size:9px">
</td>
</tr>
------------------------------------
Der Pfad ist wie schon gesagt nur zum testen statisch. Der Hostname kann aus einer Config-Variablen geholt werden, hab nur momentan nicht parat, aus welcher.
Das wars zu dem Thema, vielleicht kann es ja doch noch jemand brauchen.

Grüsse von Andreas

Gesperrt