Url rewriting de sous domaines a la volée

WRInaute discret
Bonjour,

souhaitant moi aussi créer des sous domaines a la volée (pour que unssdomainequelconque.mondomaine.com pointe vers www.mondomaine.com/lavariablepasseeenssdomaine)

Après avoir lu l'excellent tuto sur le dns wilcarding avec apache, et appliqué son enseignement (http://www.taggle.org/index.php/200...ing-avec-apache-et-alias-de-domaines-a-gogo-2)

je me retrouve maintanant avec ceci:

nimportekoi.mondomaine.com pointe vers www.mondomaine.com

A ce stade, il ne doit plus me rester que l'url rewriting a mettre en place.
Voici le code que j'ai trouvé en fouinant sur le forum devant réaliser ce que je souhaite, mais qui ne marche malheureusement pas chez moi:

Code:
RewriteCond %{HTTP_HOST} ^domaine.com$
RewriteRule ^(.*) http://www.domaine.com/$1 [QSA,L,R=301]

ceci ne m'avance a rien, et me redonne

nimportekoi.mondomaine.com pointe vers www.mondomaine.com

or le suivant fonctionne, mais supposerait une regle pour chaque sous domaine:


Code:
RewriteCond %{HTTP_HOST} ^ssdomaine.domaine.com$
RewriteRule ^(.*) http://www.domaine.com/ssdomaine$1 [QSA,L,R=301]

y aurait t'il une autre regle applicable pour obtenir le bon résultat?

merci pour vos lumieres!
 
WRInaute discret
Moi aussi j'attends une réponse.

J'ai aussi fait le tuto, et *.domaine.com = domaine.com.

J'ai aussi essayer plusieurs code htaccess et aucun marche.

Mon dernier :

Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.exemple\.com [NC]
RewriteRule (.*) http://www.exemple.com/index.php?user=$1 [QSA,R=301,L]

Et ca ne marche pas.

Des idées ???
 
WRInaute discret
Je viens de "réussir" avec :

Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.exemple\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.exemple\.com?$
RewriteRule ^(.*)$ /index.php?user=%1 [QSA,R=301,L]

La seule chose, c'est que l'URL change pour www.exemple.com/index.php?user=SOUS-DOMAINE

Comment faire pour pas que ca change ?

++

birkoss
 
WRInaute discret
salut salut,

enfin la voila la formule magique!

RewriteCond %{HTTP_HOST} !^www\.monsite\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.monsite\.com?$
RewriteRule ^(.*) http://www.monsite.com/variable=%1 [QSA,R=301,L]

merci birkoss, j'ai seulement du modifier la derniere ligne, car ca ne se passe pas comme chez toi sur mon serveur apparement (je suis chez amen).

seulement, quand j'enleve le r=301 pour que l'url ecrite dans la barre d'adresse ne change pas, j'ai un beau internal server error!!!!!

une explication?

merci a vous
 
WRInaute impliqué
rebaj83 a dit:
Code:
RewriteCond %{HTTP_HOST} !^www\.monsite\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.monsite\.com?$
RewriteRule ^(.*) http://www.monsite.com/variable=%1 [QSA,R=301,L]

seulement, quand j'enleve le r=301 pour que l'url ecrite dans la barre d'adresse ne change pas, j'ai un beau internal server error!!!!!

une explication?

c'est normal, ca boucle. Pour éviter cela, il ne faut pas faire une redirection externe, mais il faut utiliser ce qui suit :
Code:
RewriteCond %{HTTP_HOST} !^www\.monsite\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.monsite\.com?$
RewriteRule ^(.*) /variable=%1 [QSA,R=301,L]

@Dharius. Pour ne pas voir la nouvelle adresse, il suffit d'enlever la redirection :

Code:
RewriteCond %{HTTP_HOST} !^www\.monsite\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.monsite\.com?$
RewriteRule ^(.*) /variable=%1 [QSA,L]
 
WRInaute impliqué
Salut, en fait quand je fais

Code:
RewriteRule ^(.*) http://www.monsite.com/variable=%1 [QSA,R=301,L]

J'ai une redirection sur la page désirée, par contre si je fais

Code:
^(.*) http://www.monsite.com/variable=%1 [QSA,L]

Ca marche pas : ca me met à la racine de mon www...
 
WRInaute impliqué
Dharius a dit:
Salut, en fait quand je fais

Code:
RewriteRule ^(.*) http://www.monsite.com/variable=%1 [QSA,R=301,L]

J'ai une redirection sur la page désirée, par contre si je fais

Code:
^(.*) http://www.monsite.com/variable=%1 [QSA,L]

Ca marche pas : ca me met à la racine de mon www...

Ca veut dire quoi ça marche pas? Ca n'affiche pas le contenu que tu veux? La seule différence avec la règle précédente est que l'adresse ne change pas, seul le contenu change.

Mais si la première règle te convient c'est très bien.
 
WRInaute impliqué
Dharius a dit:
COncretement la 1ere règle ne me convient pas car on voit la redirection mais elle marche, la deuxième avec [QSA,L], redirige toujours uniquement à la racine (page d'accueil http://www.monsite.com) du site mais pas sur http://www.monsite.com/variable=%1 ...

c'est normal que l'adresse soit celle de la racine. Je te demande si le contenu est celui de la racine de ton site, ou celui que tu veux. Peux tu me le dire?

As tu d'autres règles dans ton .htaccess?
 
WRInaute impliqué
HA! pardon, c'est le contenu de la page d'accueil

Oui ya pas mal de choses :

RewriteEngine on

### GENERATION DE SOUS-DOMAINES A LA VOLEE ###################################
RewriteCond %{HTTP_HOST} !^www\.chine-informations\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.chine-informations\.com?$
RewriteRule ^(.*) /membres/index.php?action=fiche&id=%1 [QSA,R=301,L]
##############################################################################

RewriteRule (.*)/mp3news-([0-9]+)\.mp3 $1/mp3.php?id=$2 [L]
RewriteRule (.*)/calnom-(.*)-([0-9]+)-([0-9]+)-([0-9]+)\.png $1/gen_boutons.php?text=$2&s=$3&police=$4&dispo=$5 [L]
RewriteRule (.*)/calnom-(.*)-([0-9]+)-([0-9]+)\.png $1/gen_boutons.php?text=$2&s=$3&police=$4&dispo=1 [L]
RewriteRule (.*)/tag_(.*).html $1/recherche.php?q=$2 [L]
RewriteRule (.*)/user_([0-9]+)\.html $1/index.php?user=$2 [L]
RewriteRule (.*)/xinwen-(.*).html $1/xinwen.php?news=$2 [L]

RewriteRule (.*)/pda/(.*)_([0-9]+)\.html $1/pda/$2.php?id=$3 [L]

RewriteRule (.*)/accueil-(.*)\.html $1/index.php [L]
RewriteRule (.*)/hotel-(.*)\.html $1/index.php?ville=$2 [L]
RewriteRule (.*)/voir-(.*)\.html $1/index.php?voir=$2 [L]
RewriteRule (.*)/laction-(.*)\.html $1/index.php?action=$2 [L]
RewriteRule (.*)/beijing2008/(.*)_([0-9]+)\.html $1/annuaire-pekin-2008.php?action=fiche&id=$3 [L]
RewriteRule (.*)/(.*)_([0-9]+)\.html $1/index.php?action=fiche&id=$3 [L]
RewriteRule (.*)/recherche-(.*)\.html $1/index.php?action=recherche&q=$2 [L]
RewriteRule (.*)/archive-(.*)\.html $1/index.php?action=archive&date=$2 [L]
RewriteRule (.*)/categorie(.*)-([0-9]+)\.html $1/index.php?action=categorie&id=$3 [L]

RewriteRule (.*)/mbvac_?(.*)\.html $1/voyage-chine-sejours.php?mb_var[rw]=$2 [L]
RewriteRule (.*)/wmthotel_?(.*)\.html $1/voyage-chine-hotels.php?mb_var[rw]=$2 [L]

RewriteRule (.*)/cipic/([0-9]+)/([0-9]+)/(.*) $1/photo2.php?qualite=$2&size=$3&image=$4 [L]
RewriteRule (.*)/cipic2/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/(.*) $1/photos/phpThumb/phpThumb.php?src=$6&w=$2&sx=$3&sw=$4&sh=$5&q=85 [L]
 
WRInaute impliqué
Quand tu enlève le R=301, que se passe-t-il (regardes le log du serveur apache).

Utilise

RewriteLog finename

pour dire ou tu veux que ce soit loggé,

et utilise

RewriteLogLevel 9

pour voir tout ce qui se passe. Tu les met dans ton .htaccess.

Ca devrait aider!

Si c'est trop verbeux, tu met un chiffre plus petit que 9. 0 désactive le log.
 
WRInaute impliqué
Voilà, jai fais ce que tu as dic avec et sans la redirection, voici les résultats:

Code:
AVEC

(4) RewriteCond: input='1.chine-informations.com' pattern='!^www\.chine-informations\.com?$' => matched
(4) RewriteCond: input='1.chine-informations.com' pattern='^([^.]+)\.chine-informations\.com?$' => matched
(2) rewrite / -> /membres/index.php?action=fiche&id=1
(3) split uri=/membres/index.php?action=fiche&id=1 -> uri=/membres/index.php, args=action=fiche&id=1
(2) explicitly forcing redirect with http://www.chine-informations.com/membres/index.php
(1) escaping http://www.chine-informations.com/membres/index.php for redirect
(1) redirect to http://www.chine-informations.com/membres/index.php?action=fiche&id=1 [REDIRECT/301]

SANS

(4) RewriteCond: input='1.chine-informations.com' pattern='!^www\.chine-informations\.com?$' => matched
(4) RewriteCond: input='1.chine-informations.com' pattern='^([^.]+)\.chine-informations\.com?$' => matched
(2) rewrite / -> /membres/index.php?action=fiche&id=1
(3) split uri=/membres/index.php?action=fiche&id=1 -> uri=/membres/index.php, args=action=fiche&id=1
(2) local path result: /membres/index.php
(2) prefixed with document_root to /home/chinanew/www/membres/index.php
(1) go-ahead with /home/chinanew/www/membres/index.php [OK]

Tu vois quelque-choses ?
 
WRInaute impliqué
Je crois que le problème vient du flag QSA.
Essaie ça:
Code:
RewriteCond %{HTTP_HOST} !^www\.chine-informations\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.chine-informations\.com?$
RewriteRule ^(.*) http://www.chine.informations/membres/index.php?action=fiche&id=%1 [L]
 
WRInaute impliqué
Merci pour tes recherches, malheureuseemnt cela ne change absolument rien, les résultats sont identiques :(

[EDIT] Pardon, en fait j'arrive sur une page "Internet Explorer ne peut pas afficher cette page Web" si je mets

Code:
RewriteRule ^(.*) /membres/index.php?action=fiche&id=%1 [L]

au lieu de

Code:
RewriteRule ^(.*) http://www.chine-informations.com/membres/index.php?action=fiche&id=%1 [L]
 
WRInaute impliqué
Dharius a dit:
Merci pour tes recherches, malheureuseemnt cela ne change absolument rien, les résultats sont identiques :(

[EDIT] Pardon, en fait j'arrive sur une page "Internet Explorer ne peut pas afficher cette page Web" si je mets

Code:
RewriteRule ^(.*) /membres/index.php?action=fiche&id=%1 [L]

au lieu de

Code:
RewriteRule ^(.*) http://www.chine-informations.com/membres/index.php?action=fiche&id=%1 [L]

C'est normal, ca boucle. Mais que se passe-t-il si tu met la règle du bas?
 
WRInaute impliqué
Au fait, pour ne pas que ça boucle, il suffit de tester si ta variable est déjà passée:
pas tester, mais ça devrait marcher:

RewriteCond %{HTTP_HOST} !^www\.chine-informations\.com$
RewriteCond %{HTTP_HOST} ^([^.]+)\.chine-informations\.com$
RewriteCond %{QUERY_STRING} !^.*%1.*$
RewriteRule ^(.*)$ http://www.chine.informations/membres/i ... =fiche&id=%1 [L]

Par contre, le match de ton rewrite est trop général puisque cela redirige toutes les pages vers /membres/index.php, du moment que le sous domaine n´est pas www
 
WRInaute occasionnel
Je profite de ce topic pour dire que je n'arrive toujours pas à faire fonctionnre l'url rewriting de sous domaine sur mon site.

j'aimerais par exemple que l'adresse toto.touteslesmiss.com pointe sur www.touteslesmiss.com/page.php?var=toto

Voici ce que j'ai dans mon .htaccess :

Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.touteslesmiss\.com?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.touteslesmiss\.com?$
RewriteRule ^(.*) /variable=%1 [QSA,L]

Dans la conf d'Apache j'ai bien ServerAlias *.touteslesmiss.com www.touteslesmiss.com

Et quand je tape l'url toto.touteslesmiss.com dans le navigateur j'ai le droit à l'erreur "Serveur introuvable".

Si quelqu'un pouvait me donner un coup de main, ca serait sympa...
 
WRInaute impliqué
Je croyais qu'il fallait editer la table BIND, et pas mettre d'alais pour que cela marche.

Je dis tout de suite que je n'ai pas testé.
 
WRInaute occasionnel
J'ai viré le ServerAlias dans Apache et dans la configuration des DNS j'ai bien : * IN 88.191.XX.XXX (record A)

Mais cela ne marche toujours pas...
Code:
<VirtualHost *:80>
ServerName www.touteslesmiss.com
#ServerAlias *.touteslesmiss.com
DocumentRoot /var/www/touteslesmiss.com

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/touteslesmiss.log combined
</VirtualHost>
 
WRInaute impliqué
Tu as un serveur dédié?
Dans ce cas, tu peux ton simplement faire des rewrites de sndd dans les répertoires:

RewriteCond %[HTTP_HOST} (.*)\.ndd.com
RewriteRule ^(.*)$ /%1/$1 [QSA,L]

Enfin, il faut bien comprendre que les rewrite de sous domaines varient énormément suivant les config.
De plus, si vous utilisez des SSL, les root diffèrent souvent et les Certificats doivent être valables pour des *.domaine...
 
Discussions similaires
Haut