Aller au contenu

Sous domaine variable


Sujets conseillés

Guest pirw3t
Posté

Bonsoir à tous,

Ce message est destinés aux ames charitables

En effet je suis une quiche en ce qui concerne toute programmation, et j'ai besoin d'un coup de pouce pour la réalisation de mon htaccess.

l'example : ( en essayant d'être le plus clair possible )

Le site principal : www.site.com - http://site.com

Si on accéde au site avec : http://xxx.site.com

Ca redirige sur : http://site.com/id.php?id=xxx

Merci pour votre aide, je suis moi même designer et ravi de vous rendre la pareille si besoin.

Posté

Bonjour pirw3t,

J'avais donné la solution à ce type de problème il y a quelque temps sur le Hub:

http://www.webmaster-hub.com/index.php?sho...t=15entry8310

Il te suffit d'adapter l'adresse IP et les paramètres propres à ton domaine, comme l'email de contact, le DocumentRoot, les alias, les fichiers logs etc...

Ces modifications sont à faire dans le fichier httpd.conf (configuration d'Apache) et non dans le .htaccess. En effet, le fichier .htaccess n'est accédé qu'une fois le nom de domaine résolu, il est donc trop tartd pour en changer, si ce n'est en faisant une redirection externe qui dans ce cas-ci ne fonctionnera pas.

Il faut définir un alias "catch-all", ce qui se fait facilement au niveau de la déclaration de "virtual host" (le *.domaine.net dans l'exemple).

Comme il n'y a qu'un seul DocumentRoot pour tous les sous-domaines, il faudra que la redirection se fasse à ce niveau. Quelques lignes de code dans le fichier index.php suffiront à traiter cela. En effet, une des variables d'environnement passée par php est justement le nom du Host ($_SERVER['HTTP_HOST'])

Pour extraire le sous domaine, il est facile d'utilise la fonction ereg_replace() en masquant le nom de domaine, par exemple pour ton domaine:

$sous_domaine = ereg_replace(".france-blog.com","",$_SERVER[HTTP_HOST]);

Et voilà, une fois que tu as la variable $sous_domaine, tu en fais ce que tu veux, y compris la passer en argument à d'autres scripts que tu appelleras avec la fonction header("Location: nom_du_script")

Dan

Guest pirw3t
Posté (modifié)

Merci Dan, pour le script php que tu ma réalisé, je le poste ici pour qu'il puisse servir à tous le monde.

<?php
$sous_domaine = ereg_replace(".domaine.com","",$_SERVER['HTTP_HOST']);

if (!strcmp('domaine.com',$_SERVER['HTTP_HOST'])||$sous_domaine=="")
header("Location: web/");
else
{
if (!strcmp($sous_domaine, "www"))
header("Location: web/");
else {
$sous_domaine = ereg_replace("www\.","",$sous_domaine );
header("Location: http://domaine.com/?id=".$sous_domaine);
}
}

?>

J'ai encore une petite question,

Comment redirigé : www.domaine.com/xxx

En : http://xxx.domaine.com

Merci beaucoup, je précise que xxx peut contenir des chiffres, des lettres ou les deux.

Modifié par pirw3t
Posté
Comment rediriger : www.domaine.com/xxx

En : http://xxx.domaine.com

C'est simple mais il faut passer par une redirection externe, vu que tu changes de sous-domaine .... (flag [R])

RewriteCond %{ HTTP_HOST}   www.domaine.com 
RewriteRule ([a-z0-9]+)$   http://$1.domaine.com [NC,R,L]

Le NC veut dire indépendamment de la casse donc a-z couvre majuscules et minuscules

Le R force une redirection externe... si tu veux une redirection permanente pour que les moteurs mettent leur index a jour, utilises R=301

Le L veut dire Last, dernière règle si valide.

Dan

PS: j'ai mis un RewriteCond pour éviter les bouclages en redirection, vu que c'est pour compléter la redirection faite par le code php cité au dessus ;)

  • 2 semaines plus tard...
Posté

Bonjour, Moi je voudrais faire pointer des sous domaines de facon automatique.

Je m'explique j'ai deux nom de domaine qui pointe sur mon serveur ( maison ).

www.site.com et www.site.net

Je veux utiliser .net sur mon site principal ( ca pas de problème )

mais ce que je n'arrive pas à faire c'est ca :

J'ai pour l'instant un VIRTUALHOST pour chaque sous domaine mais ca devient de plus en plus lourd et pas tres pratique.

je suis sur windows 2000 serveur avec apache 1.3.27

les membres sont dans :

c:\home\www\user\membre1

c:\home\www\user\membre2

c:\home\www\user\membre3

c:\home\www\user\membre4

c:\home\www\user\membre5

Je voudrais que lorsque l'ont tape membre1.site.com membre2.site.com

Il arrive directement dans leur répertoire.

Mais sans créer de VIRTUALHOST à chaque fois .

Si quelqu'un aurais l'info ca serai super :up:

Posté

:up: c'est bon j'ai trouvé :up:

<VirtualHost 193.251.x.x> 
ServerAdmin webmaster_AT_site.com
DocumentRoot c:\home\www\user
ServerName www.site.com
ServerAlias site.com *.site.com
VirtualDocumentRoot /home/www/user/%-3.0
UseCanonicalName off
</virtualHost>

à mettre dans httpd.conf ;)

  • 10 months later...
Posté

Voilà je fait remonter ce vieux post à la surface car je me bat actuellement sur le même problème.

j'ai bien le mod_vhost_alias installé dans apache ,

je place dans mon httpd.conf

<VirtualHost xxx.xxx.x.x>

ServerAdmin webmaster_AT_domaine.tld

DocumentRoot /home/domaine/www

ServerName www.domaine.tld

ServerAlias domaine.tld *.domaine.tld

VirtualDocumentRoot /home/www/%2.1

UseCanonicalName off

</virtualHost>

alors si je me trompe pas si je tape test.domaine.tld ou nimportequoi.domaine.tld je dois en fait etre dans /home/www/d/

Alors il doit y avoir une astuce que j'ai passé.. y a -til quelque chose a déclaré dans bind dns pour que tous les sous domaine possible soit existant?

Il y a un delai avant le fonctionnement?

j'ai lu pas mal de doc là dessus et je ne vois vraiment rien de plus a faire pour y arriver...

Posté

Salut François0607,

Il faut bien sûr créer un dernier champ A dans la config de la zone.

Ce champ est un nom de sous-domaine pour lequel tu mettras le caractère * tout simplement.

Exemple (c'est tout bête):

*  IN   A  123.123.123.123

avec la bonne IP, bien sûr ;)

Une fois fait, tu redémarres bind/named et ça roule ;)

Dan

  • 1 month later...
Posté (modifié)

Bonjour ,

Y a-t-il un moyen quelconque de faire cela avec un serveur mutualisé ?

Merci

Modifié par KingLouis
Posté
Bonjour ,

Y a-t-il un moyen quelconque de faire cela avec un serveur mutualisé ?

Merci

Non, malheureusement. Il faut pouvoir configurer Apache et named, ce que tu ne peux pas faire sur un hébergement mutualisé ;)

Dan

  • 3 semaines plus tard...
Posté

Je me répond à moi même : OUI

Je ne pense pas bien sur que ce soit exactement la même chose mais l'idée est :

on redirige truc.site.com ( truc est variable ) vers la racine du site

le fichier index.php a la racine recupere l'adresse truc.site.com ( http host ) , la découpe pour obtenir truc , et apres on en fait ce qu'on veut .

Moi ça me sert bien pour mon systeme de blog :

http://www.blog4ever.com

Par exemple http://test.blog4ever.com/ envoie " test.blog4ever.com " que je découpe sur l'index , pour ensuite interpreter en mysql ( je vais chercher l'idée du blog ... ) .

En esperant que ça aidera un peu

KL

Posté

KingLouis,

Le "truc" est qu'il faut arriver au serveur truc.site.com, et que sans avoir déclaré le sous-domaine, on tombera sur un "server not found"...

Donc soit tu crées le sous-domaine manu militari dans l'interface de l'hébergeur, soit ce n'est pas possible sur un mutualisé parce que tu ne pourras pas créer un sous-domaine * ;)

Dan

Posté

Mon site est sur un serveur mutualisé et ça marche .

En fait j'ai configuré les DNS d'une certaine manière ( enfin c'est le support technique qui l'a fait pour moi ) .

Je ne créé pas les sous domaines manuellement .

Posté

Dan tu t'avance un peu trop vite :)

Il y a, chez certains hébergeurs mutualisés, possibilité de créer des wildcard subdomains (*)

Et ça commence à se répandre ;)

  • 3 months later...
Posté

Bonjour,

J'ai un petit soucis du genre malheuresement...

J'aimerais rediriger index.php?id=1xc sur 1xc.domaine.com

Comment configurer apache et le htaccess ?

Merci

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...