[PHP] Subdomain ophalen en printen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GekkeCoen
  • Registratie: September 2005
  • Laatst online: 20-02 22:53
Goededag,

Is er een mogelijkheid om met php de ingevoerde subdomein op te halen? Als je bijvoorbeeld naar de site gaat: banaan.fruit.nl dat je met php het woord banaan kan printen. Je kan bijvoorbeeld wel met $_SERVER['REQUEST_URI'] de url ophalen zonder de host (in dit geval fruit.nl).

Ik kan op internet niks vinden, waarschijnlijk omdat ik niet de goede keywords kan vinden.

Met vriendelijke groeten,
Coen Keijzer

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 00:22

DizzyWeb

Ondertiteld

Dit is wat ik zelf gebruik:

PHP:
1
2
3
4
5
    $domain = 'fruit.nl';
    $subdomain = $_SERVER['HTTP_HOST'];
    $subdomain = eregi_replace("\." . $domain, "", $subdomain);
    $subdomain = eregi_replace("www\.", "", $subdomain);
    $subdomain = strtolower($subdomain);

Acties:
  • 0 Henk 'm!

Verwijderd

Als je hiervoor een zoekopdracht op het internet doet ben je ook helemaal verkeerd bezig. Als je gewoon even ergens <?php print_r ( $_SERVER ); ?> had gezet kreeg je ook genoeg informatie om mee verder te kunnen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je zat al in de buurt door naar $_SERVER te kijken. Als je wil weten wat allemaal in deze array zit, hoef je enkel een print_r($_SERVER); te doen en dan had je zelf al verder kunnen komen.

Overigens zie ik niet in waarom DizzyWeb eregi_replace er tegen aan moet gooien, geen noodzaak voor een regex dus str_replace volstaat ook.

{signature}


Acties:
  • 0 Henk 'm!

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Er zijn twee mogelijkheden:

1) Middels een explode() op het punt-teken alle onderdelen van de URL ophalen, en dan de laatste twee delen negeren (het domein en de extensie):
PHP:
1
2
3
4
5
$urlparts = explode( '.', $_SERVER['HTTP_HOST'] );
if( count( $urlparts ) > 2 )
    $subdomain = implode( '.', array_slice( $urlparts, 0, count($urlparts)-2 ) );
else
    $subdomain = '';


2) Middels een regex:
PHP:
1
2
3
4
if( preg_match( '/(.+?)\..+?\.[a-z]{2,3}/i', $_SERVER['HTTP_HOST'], $match ) )
    $subdomain = $match[1];
else
    $subdomain = '';

Oftewel: match alle karakters voor .domein.ext

Eventueel is de regex te herschrijven naar
PHP:
1
preg_match( '/([^.]+)\.[^.]+\.[a-z]{2,3}/i', $_SERVER['HTTP_HOST'], $match );

De eerste geeft in het geval van sub1.sub2.domein.nl overigens 'sub1.sub2' terug, de tweede regex in dat geval enkel 'sub2'.

[ Voor 18% gewijzigd door B-Man op 16-10-2006 01:09 ]


Acties:
  • 0 Henk 'm!

  • GekkeCoen
  • Registratie: September 2005
  • Laatst online: 20-02 22:53
DizzyWeb schreef op zondag 15 oktober 2006 @ 13:19:
Dit is wat ik zelf gebruik:

PHP:
1
2
3
4
5
    $domain = 'fruit.nl';
    $subdomain = $_SERVER['HTTP_HOST'];
    $subdomain = eregi_replace("\." . $domain, "", $subdomain);
    $subdomain = eregi_replace("www\.", "", $subdomain);
    $subdomain = strtolower($subdomain);
Dit werkt niet, ik krijg dan www. geprint. Terwijl ik dat helemaal niet in de adresbalk ingevuld hebt. :s En dat van B-man percies hetzelfde.

Acties:
  • 0 Henk 'm!

  • InZane
  • Registratie: Oktober 2000
  • Laatst online: 20:14
Zoiets dan?

PHP:
1
2
3
4
5
6
$serverArr = explode('.', $_SERVER['SERVER_NAME']);

//evt. 'www' eraf slopen
if($serverArr[0] == 'www') {
    array_shift($serverArr);
}

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 01:02
GekkeCoen schreef op dinsdag 24 oktober 2006 @ 11:38:
Dit werkt niet, ik krijg dan www. geprint. Terwijl ik dat helemaal niet in de adresbalk ingevuld hebt. :s En dat van B-man percies hetzelfde.
Doe dan gewoon eens wat al twee keer gezegd is: print_r($_SERVER) en kijk waar je het subdomein terug kunt vinden.

Acties:
  • 0 Henk 'm!

  • GekkeCoen
  • Registratie: September 2005
  • Laatst online: 20-02 22:53
Raynman schreef op dinsdag 24 oktober 2006 @ 12:20:
[...]
Doe dan gewoon eens wat al twee keer gezegd is: print_r($_SERVER) en kijk waar je het subdomein terug kunt vinden.
Dat heb ik gedaan, maar het subdomein komt er geeneens in voor. Hier een voorbeeldje, het subdomein is test maar is verder niet op de pagina te vinden.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Dan kun je er dus ook neit aankomen. Waarschijnlijk wordt op een hoger niveau al het subdomein gemapt naar www (vandaar dat je enkel www.linkstraat.nl terug ziet). Php weet niks van het subdomein dus kan het ook nooit zelf achterhalen.

Wel een vreemde manier van serverconfiguratie trouwens.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • GekkeCoen
  • Registratie: September 2005
  • Laatst online: 20-02 22:53
Janoz schreef op dinsdag 24 oktober 2006 @ 14:11:
Dan kun je er dus ook neit aankomen. Waarschijnlijk wordt op een hoger niveau al het subdomein gemapt naar www (vandaar dat je enkel www.linkstraat.nl terug ziet). Php weet niks van het subdomein dus kan het ook nooit zelf achterhalen.

Wel een vreemde manier van serverconfiguratie trouwens.
Deze configuratie heeft de host voor me geregeldt maar is er geen andere manier op erachter te komen?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

php weet het gewoon niet zoals je in het lijstje kunt zien. Dat zijn alle server variabelen. Als je het perse wilt weten zul je allemaal vreemde dingen uit moeten halen door met javascript de location uit te lezen en deze op te sturen. Dit kost je dus een extra request en is behoorlijk niet gegarandeerd.

Makkelijker lijkt me gewoon om dit probleem bij de hoster neer te leggen. Ten eerste vragen hoe ze dit zo hebben gedaan en vervolgens vragen of ze een oplossing voor je probleem hebben. Misschien is het zelfs wel heel makkelijk, maar omdat je het nog neit gevraagd hebt bieden ze je die oplossing dus nog niet aan (denk aan het vertalen van blaat.domein.nl naar domein.nl/blaat of domein.nl/?blaat).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • GekkeCoen
  • Registratie: September 2005
  • Laatst online: 20-02 22:53
Janoz schreef op dinsdag 24 oktober 2006 @ 14:21:
php weet het gewoon niet zoals je in het lijstje kunt zien. Dat zijn alle server variabelen. Als je het perse wilt weten zul je allemaal vreemde dingen uit moeten halen door met javascript de location uit te lezen en deze op te sturen. Dit kost je dus een extra request en is behoorlijk niet gegarandeerd.

Makkelijker lijkt me gewoon om dit probleem bij de hoster neer te leggen. Ten eerste vragen hoe ze dit zo hebben gedaan en vervolgens vragen of ze een oplossing voor je probleem hebben. Misschien is het zelfs wel heel makkelijk, maar omdat je het nog neit gevraagd hebt bieden ze je die oplossing dus nog niet aan (denk aan het vertalen van blaat.domein.nl naar domein.nl/blaat of domein.nl/?blaat).
Ik heb inmiddels een mailtje naar de host gestuurd.

Er kan ook doorgestuurd worden door middel van HEADER(), maar dit is toch een nadeel voor zoekmachines? Zoja, welke?

[ Voor 6% gewijzigd door GekkeCoen op 24-10-2006 14:45 ]

Pagina: 1