Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Indexseite mit Parameter

Xb2.Net von Boris Borzic

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1334
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Indexseite mit Parameter

Beitrag von Rudolf » Di, 12. Sep 2017 10:59

Hallo,
ich brauche eine Weiche für den Login damit ich verschiedene Indexseiten aufrufen kann. Zuerst dachte ich dass ich einen Parameter angeben kann, geht aber nicht, z.B. localhost:81?action=login1 ergibt The requested file was not found ! aus der Methode onnotfound(). Mit login1.localhost:81 geht es, ich kann dann mit oClient:HTTPRequest:host() login1 rausfiltern. Habe ein Domain für meinen Webserver registriert und eine Umleitung auf die IP und den Port gemacht, hier funktioniert es wiederum nicht. Wie kann ich also unterschiedliche Logins für einen Webserver machen ?
Grüße
Rudolf

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13803
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Martin Altmann » Di, 12. Sep 2017 11:12

Moin Rudolf,
Boris hat doch ein ganz gutes Beispiel dabei - baue einfach subdomains! Die kannst Du dann auch entsprechend verzweigen.
Dazu nutzt Du einfach den FilterRequest:

Code: Alles auswählen

Function FilterRequest(oClient)
  Local i
  Local cHost := oClient:HTTPRequest:Host()
  Local cPath := oClient:HTTPRequest:Path()

  if valtype( cHost ) == "U"
  	cHost := ""
  endif
  if valtype( cPath ) == "U"
  	cPath := ""
  endif
  // strip out port numbers
  if (i := At(':',cHost)) > 0
    cHost := Left(cHost,i-1)
  endif
	if lower( left( cHost, 9 ) ) == "meldungen"
		cHost := ""
		if cPath $ "/\" .or. Empty(cPath)
			cPath := "/index.html"
		endif
	elseif lower( left( cHost, 12 ) ) == "kundenportal"
		cHost := ""
		if cPath $ "/\" .or. Empty(cPath)
			cPath := "/Login"
			oClient:HTTPRequest:StartLine += "?"
		endif
	elseif .not. empty( cHost )
		cHost := "/altem"
		if cPath $ "/\" .or. Empty( cPath )
			cPath := "/index.html"
		endif
	endif
  // modify requested path
  cPath := cHost + cPath
  oClient:HTTPRequest:Path(cPath)
Return .T.
den Du wie folgst einbaust:

Code: Alles auswählen

MEMVAR->oWebServer:FilterRequest  := {|o| FilterRequest(o)}
In meinem Beispiel wird aus meldungen.altem.de :arrow: /index.html
aus kundenportal.altem.de :arrow: /Login?
aus altem.de (oder www.altem.de) :arrow: /altem/index.html

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1334
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Rudolf » Di, 12. Sep 2017 13:37

Hallo Martin,
danke, so ähnlich habe ich es gemacht, aber ich kann auf einem anderen Rechner im Netzwerk mit dem Webserver nicht z.B. kundenportal.192.168.0.105:81 aufrufen, das geht nur mit localhost. Auch von außerhalb geht es nicht.
Grüße
Rudolf

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13803
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Martin Altmann » Di, 12. Sep 2017 13:49

Hallo Rudolf,
das kannst Du auch nicht - dafür muss ein entsprechender Eintrag im DNS vorliegen (oder in der lokalen "C:\Windows\System32\drivers\etc\hosts").
Im letzteren Fall schreibst Du Dort (auf dem PC, von dem aus Du testen willst) z.B. rein:

Code: Alles auswählen

192.168.0.105       kundenportal.webserver.localhost
192.168.0.105       meldungen.webserver.localhost
192.168.0.105       www.webserver.localhost
Dann kannst Du in Deinem Browser kundenportal.webserver.localhost als Adresse eingeben (oder eine der anderen beiden), landest immer auf dem selben Zielserver, der aber anhand des FilterRequest dann unterschiedlich reagiert.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Roland Gentner
1000 working lines a day
1000 working lines a day
Beiträge: 946
Registriert: Fr, 24. Nov 2006 8:30
Wohnort: Neresheim
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Roland Gentner » Mi, 13. Sep 2017 22:38

Wie Matin schon geschrieben hat müsstest Du verschiedene (Sub-)Hosts verwenden.
Die Web-Server arbeiten vorrangig mit Host-Headern (DNS-gesteuert).
In Intra-Netzen kann das schon über mehrere IP-Adressen je Netzwerkkarte gemacht werden, ist aber bei public Hostern nicht mehr üblich bzw machbar.
Gruß
Roland

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1334
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Rudolf » Do, 14. Sep 2017 9:23

Hallo,
danke für Eure Antworten, dann muss ich mir eine andere Methode suche, mich wundert nur dass ich keine Parameter an die Index Seite übergeben kann die ich mit oServer:IndexFile definiere.
Grüße
Rudolf

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1334
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Indexseite mit Parameter

Beitrag von Rudolf » Do, 14. Sep 2017 9:53

Hallo,
Problem gelöst, ich prüfe im Filter einfach auf den String im Path und ändere die Index Seite, das geht anscheinend immer.
Grüße
Rudolf

Antworten