Toon posts:

[ASP] CMS multi-site maken: virtual directory voor domeinen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste tweakers,

Vorig jaar heb ik een CMS gemaakt in ASP. Op dit moment lopen alle websites in een aparte virtual directory die telkens een kopie van het CMS bevat. 54 website betekent dus 54 kopieën van het cms. Om de onderhoudbaarheid te verbeteren, wil ik mijn cms echt multi-site maken. Ik zou graag naar een situatie toe willen, waarbij alle domeinen in één virtual directory uitkomen. Op die manier hoef ik niet alle 54 mappen af te lopen wanneer er een patch uitkomt, omdat ik dan volsta met het patchen van één map.

Ik heb zelf al een aantal opties geprobeerd. Ik loop echter altijd tegen één van onderstaande problemen aan:
  • Ik moet het CMS laten weten, van welk domein de bezoeker komt. Iemand die de website bezoekt van klant 1, moet natuurlijk niet de website van klant 2 te zien krijgen. Hoe laat ik het cms weten, dat de bezoeker via een bepaald domein is binnengekomen?
  • Het adres in de adresbalk veranderd: bijvoorbeeld www.websitevanklant.nl wordt www.hierstaathetcms.nl

optie 1:

Voor probleem 1 heb ik waarschijnlijk al een oplossing: elk domein zijn eigen standaardpagina laten hanteren.
  • Domein 1 ---> default.asp
  • Domein 2 ---> default2.asp
  • Domein 3 ---> default3.asp
optie 2
Het zou echter mooier zijn, als ik via de url een variabele mee kan sturen. Dit zou er bijvoorbeeld zo uit gaan zien:
  • Domein 1 ---> default.asp?siteID=1
  • Domein 2 ---> default.asp?siteID=2
  • Domein 3 ---> default.asp?siteID=3
Heeft iemand een oplossing voor dit probleem. Alvast heel erg bedankt!

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

een login maken zodat je weet wie inlogt
en dan juiste dingen includen

en eventueel met een sessie opslaan ofzo

[ Voor 30% gewijzigd door MeIsTwisted op 22-06-2005 23:24 ]

Multimonitor is relax :P


Verwijderd

Topicstarter
Hoe bedoel je dit? Een login voor het cms of voor de bezoeker?

Op het CMS zit uiteraard al een login en dit is het probleem ook niet. Het probleem zit hem in de bezoeker. Die moet namelijk gewoon naar een domein surfen en de website te zien krijgen, zonder dat hij/zij moet inloggen of iets moet kiezen.

Met andere woorden: hoe zorg ik dat een asp-pagina weet van welk domein de bezoeker komt?

Bedankt voor je reactie

[ Voor 13% gewijzigd door Verwijderd op 22-06-2005 23:34 ]


  • SvMp
  • Registratie: September 2000
  • Niet online
Zowel optie1 als optie2 is imho nogal ongelukkig, omdat een gebruiker eventueel handmatig de bestandsnaam van de pagina in kan vullen.
www.domein1.nl zou standaard www.domein1.nl/default1.asp moeten tonen, maar als een gebruiker handmatig www.domein2.nl/default1.asp invoert, dan zie je de website van klant #1 op het domein van klant #2. Daar kan vervelend misbruik van worden gemaakt. En zo zijn er nog meer voorbeelden te bedenken, zeker met 54 sites.

Je zou naar een andere oplossing moeten zoeken. Is het niet mogelijk om de http-header te lezen met ASP? Daar moet de domeinnaam waar je heen surft gewoon in te vinden zijn.

[ Voor 9% gewijzigd door SvMp op 22-06-2005 23:44 ]


  • wica
  • Registratie: Februari 2002
  • Laatst online: 14-01 16:59

wica

De duivel jacht op me

Kan je in windows niet een symbolische link maken van die dir?
Dan heb je op 1 plaats de echte code. En de andere zijn er verwijzingen naar.

En als dit niet gaat.
Dan kan je toch in het script aan de SERVER_NAME zien welke host je hebt?

ps. ik praat van uit de ervaring apache/php maar neem aan dat ASP ook zoiets heeft

RFC | The Linux Document Project | gentoo.


Verwijderd

Topicstarter
Zoals het er nu naar uit ziet is de http-header inderdaad de oplossing. Deze is bij elk domein anders.
Ik ga de boel morgen uitproberen, want het vriendinnetje wil ook haar aandacht O+ :9

Voor mensen die met hetzelfde probleem zitten: <%Response.Write(Request.ServerVariables("server_name"))%> is de asp-code om de domeinnaam op te vragen.

Ik hou jullie op de hoogte! Nogmaals bedankt voor jullie reacties!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
let er ook even op dat login accounts aan een domein worden gekoppeld, anders kan je inloggen op www.domein1.nl en dan lekker de content van www.domein17.nl gaan beheren.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
gewoon met één map werken die buiten de wwwroot van je sites staat... in die map plaats je een reeks aan includes die je vanuit 1 bestand wat wel in de wwwroot van de sitest staat aanroept... Enige waar je dan even op moet letten dat zijn de IIS gebruikers (IUSR en IWAM)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Hoe ik het geregeld heb in mijn CMS (weliswaar in ASP.NET):

Lees de URL uit (dat kan in classic ASP ook) en split die op "/" zodat je het domein loshaalt van eventuele file-referenties.
In je database heb je een tabel 'Sites" met daarin:
- SiteID
- Titel
- URL

Doe een SELECT op basis van het domein en krijg een ID en titel terug. Dat ID hou je in een variabele die door de rest van je pagina wordt uitgelezen (in .NET kun je hier het Context object voor gebruiken).

De rest van je pagina gebruikt dan oa. het siteID in die variabele bij het ophalen van content.

In al je andere tabellen heb je natuurlijk een veld 'SiteID' zodat je paginadefinities, artikelen en andere content specifiek voor elke site kunt opslaan.
Dit geldt natuurlijk ook voor je rechtensysteem zodat je gebruikers per site afzonderlijk toegang kunt geven.

Als je dus een pagina wilt ophalen, doe je dat op zowel PaginaID als SiteID. Zelfde geldt voor content.

[ Voor 15% gewijzigd door Not Pingu op 23-06-2005 17:23 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

is dit niet een idee?

Domein 1 in Virtual dir 1 ---> default.asp { default.asp = response.redirect default.asp?siteID=1 in Virtual dir met CMS}
Domein 2 in Virtual dir 2---> default.asp { default.asp = response.redirect default.asp?siteID=2 in Virtual dir met CMS}
Domein 3 in Virtual dir 3 ---> default.asp { default.asp = response.redirect default.asp?siteID=3 in Virtual dir met CMS}

Dus n+1 VD's voor n sites... Gevolg is dat je CMS nog steeds in 1 VD staat met alle gemakken van dien, je moet alleen ff voor elk domein een VD aan maken, maar deze blijven altijd ongewijzigd.

[ Voor 35% gewijzigd door Verwijderd op 23-06-2005 18:00 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-04 12:54

Jaspertje

Max & Milo.. lief

Verwijderd schreef op donderdag 23 juni 2005 @ 17:22:
is dit niet een idee?

Domein 1 in Virtual dir 1 ---> default.asp { default.asp = response.redirect default.asp?siteID=1 in Virtual dir met CMS}
Domein 2 in Virtual dir 2---> default.asp { default.asp = response.redirect default.asp?siteID=2 in Virtual dir met CMS}
Domein 3 in Virtual dir 3 ---> default.asp { default.asp = response.redirect default.asp?siteID=3 in Virtual dir met CMS}

Dus n+1 VD's voor n sites... Gevolg is dat je CMS nog steeds in 1 VD staat met alle gemakken van dien, je moet alleen ff voor elk domein een VD aan maken, maar deze blijven altijd ongewijzigd.
En dan de eerste persoon die die url bekijkt,. denkt dan nummertje veranderen, kijken wat het doet..

Verwijderd

Draai je CMS op 1 domein
www.cmssysteem.nl

tabelletje met users maken (of whatever je het ook in opslaat)
username = sitenaam.nl

alle plaatjes/teksten e.d. worden opgeslagen op je cms server
op deze manier geef je ook je broncode niet uit handen en hoef je maar 1x te updaten (het probleem wat jij dus nu hebt)

edit: leesfoutje! aangezien je virtual directory's gebruikt en je alles op 1 server hebt staan staat de content toch al "lokaal" op dezelfde server..

[ Voor 30% gewijzigd door Verwijderd op 23-06-2005 22:34 ]


Verwijderd

Jaspertje schreef op donderdag 23 juni 2005 @ 22:24:
[...]


En dan de eerste persoon die die url bekijkt,. denkt dan nummertje veranderen, kijken wat het doet..
idd klein denkfoutje (maar nu getest) een redirect geeft het nieuwe path in de adresbalk, wat niet gewenst is... (ik was in de veronderstelling dat het adres niet veranderen zou)

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Dan gebruik je Server.Transfer, dan verandert het adres niet...

Overigens wil ik de TS wel even wijzen op URI-designs... Iedereen heeft het hier vrolijk over default.asp?siteID=1&pageID=2&subpageID=3 etc. De bezoeker wordt daar niet gelukkig van. Leesvoer voor één ieder die een CMS bouwt

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Verwijderd

Als je het siteid nu gewoon in default.asp (of een header.asp ) defineerd? Daarmee hoe je niets via de url mee te geven en kun je later verschillende domeinen op dezelfde content laten werken.
Het beheren van de content zou je via één centraal domein kunnen doen.

Verwijderd

faabman schreef op donderdag 23 juni 2005 @ 22:45:
Dan gebruik je Server.Transfer, dan verandert het adres niet...

Overigens wil ik de TS wel even wijzen op URI-designs... Iedereen heeft het hier vrolijk over default.asp?siteID=1&pageID=2&subpageID=3 etc. De bezoeker wordt daar niet gelukkig van. Leesvoer voor één ieder die een CMS bouwt
Veel CMS'en maken gebruik van frames. En juist bij een CMS vind ik dat je het niet gek moet vinden dat URL's ingewikkeld worden. Je kunt beter zorgen dat de navigatie uitstekend in orde is, zodat er nooit een URL ingetypt hoeft te worden.

Vriendelijke URL's voor een website is okay, maar voor een complexe applicatie kun je prima gebruik blijven maken van de gemakkelijkste methode, die altijd werkt.

Verwijderd

Is inderdaad lastig...

Ik zou het waarschijnlijk als volgt oplossen...

Stel:

Klant 1 heeft een website met de url www.klant1.nl
Het bijbehorende cms kun je dan bereikbaar maken via cms.klant1.nl
Elke URL wijst hierbij naar een eigen "site" in IIS.

Binnen de cms "site" kun je vervolgens een "virtual dir" aanmaken waar je de code neerzet die je voor alle cms-en wilt delen, noem deze dir bijvoorbeeld "CmsShared".
Je includes moet je mogelijk wel aanpassen van "include file" naar "include virtual". Ook kan het nodig zijn om in de properties van je virtual dir in IIS de "application name" te verwijderen.

De code die voor elke klant verschilt (bijvoorbeeld de opmaak van je cms, de lokatie van een database, etc) kun je nu in je cms "site" kwijt. Je gedeelde code in de virtual dir (die voor iedere klant naar de zelfde dir op de schijf wijst)

Hope this helps...

Sander

Verwijderd

Verwijderd schreef op woensdag 22 juni 2005 @ 23:32:
Hoe bedoel je dit? Een login voor het cms of voor de bezoeker?

Op het CMS zit uiteraard al een login en dit is het probleem ook niet. Het probleem zit hem in de bezoeker. Die moet namelijk gewoon naar een domein surfen en de website te zien krijgen, zonder dat hij/zij moet inloggen of iets moet kiezen.

Met andere woorden: hoe zorg ik dat een asp-pagina weet van welk domein de bezoeker komt?

Bedankt voor je reactie
Nog even inhakend op deze post. Request.ServerVariable("HTTP_REFER") daarmee kan je kijken van welk domain een gebruiker komt.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Verwijderd schreef op donderdag 23 juni 2005 @ 22:59:
[...]

Veel CMS'en maken gebruik van frames. En juist bij een CMS vind ik dat je het niet gek moet vinden dat URL's ingewikkeld worden. Je kunt beter zorgen dat de navigatie uitstekend in orde is, zodat er nooit een URL ingetypt hoeft te worden.

Vriendelijke URL's voor een website is okay, maar voor een complexe applicatie kun je prima gebruik blijven maken van de gemakkelijkste methode, die altijd werkt.
Wat versta je onder een CMS? En hebben we het over de back-end of the front-end? Voor de back-end kan ik me heel goed indenken dat je niets doet met je URI-design. Voor webapplicaties met een beperkte doelgroep kan ik me zeker indenken dat je niets doet met URI-design. Voor je front-end ben ik er echter voorstander van om vriendelijke URLs te genereren en daarvoor heb ik een aantal redenen:
  • Mocht de opdrachtgever ooit besluiten gebruik te gaan maken van een andere cms applicatie dan kan het heel goed zijn dat die op een andere manier is ingericht, het kan hierdoor voorkomen dat de URI's van je pagina's komen te vervallen. Erg vervelend voor zoekmachine indexering. (Je kunt natuurlijk met je HTTPHeader spelen, maar ik geloof niet dat dat hetzelfde effect heeft als het behouden van de URI)
  • Uit eigen ervaring kan ik stellen dat een vriendelijke URL je bezoekers het gevoel geeft meer controle te hebben over de navigatie. Zeker wanneer je de hierarchie van je site verwerkt in je URI.
  • Wat te denken van het analyseren van logbestanden van je site met statistiekensoftware. Ik maak zelf gebruik van een pakket wat de IIS logbestanden uitpluist (urchin) en moet zeggen dat ik er maar wat blij mee ben dat ik ben overgestapt op vriendelijke URI's. Mijn opdrachtgevers zien nu direct welke documenten / pagina's er veel worden bezocht en hoeven niet eerst de URLs over te nemen in de adresbalk om te kijken welke pagina er ook al weer bedoelt wordt met default.asp?pageID=100.
  • Wanneer je gebruik maakt van vriendelijke URI's dan kun je daarin zoektermen meenemen die een bijdrage leveren aan je ranking binnen de zoekmachines.

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Verwijderd schreef op donderdag 23 juni 2005 @ 23:39:
[...]


Nog even inhakend op deze post. Request.ServerVariable("HTTP_REFER") daarmee kan je kijken van welk domain een gebruiker komt.
Request.ServerVariable("HTTP_REFER") = Request.ServerVariables("HTTP_REFERER") :? ;)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

faabman schreef op donderdag 23 juni 2005 @ 23:44:
• Wat te denken van het analyseren van logbestanden van je site met statistiekensoftware. Ik maak zelf gebruik van een pakket wat de IIS logbestanden uitpluist (urchin) en moet zeggen dat ik er maar wat blij mee ben dat ik ben overgestapt op vriendelijke URI's. Mijn opdrachtgevers zien nu direct welke documenten / pagina's er veel worden bezocht en hoeven niet eerst de URLs over te nemen in de adresbalk om te kijken welke pagina er ook al weer bedoelt wordt met default.asp?pageID=100.
[/list]
Als je ervoor kiest om met IIS logs te werken, dan is dat idd een probleem. Kies je er echter voor om je CMS zelf het e.e.a. te laten loggen en analyseren, dan kun je natuurlijk net zo makkelijk een pagina ID koppelen aan een titel en bijv. een previewvenster ofzo.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 13:54
Dit is echt heel simpel, je hebt een soort van pagina-boom tabel neem ik aan? In elk geval heeft iedere pagina een uniek ID. Wat je doet:
Je maakt een tabel aan genaamd domains met velden pageID, domain
Hier voer je dus iets in als:
4, tweakers.net
5, gathering.tweakers.net

Vervolgens kijk je in het bestand default.asp of je het domein in de HTTP_HOST variable kan vinden. Deze zal je ASP vast wel hebben, in PHP zit die onder: $_SERVER['HTTP_HOST'].

Verder is het handig om een extra veld te maken genaamd redirect zodat je eenvoudig naar subpagina's kunt linken.
Pagina: 1