Rediriger tous les sous-domaines "numériques" vers un autre sous-domaine

WRInaute discret
Bonjour,

Je souhaite rediriger via htaccess, tous les sous-domaines "numériques" vers un autre sous-domaine.
Exemples :
Code:
http://12.domaine.com/mapage.php?vars=mesvars
http://345.domaine.com/mapage.php?vars=mesvars
http://6789.domaine.com/mapage.php?vars=mesvars
vers
http://sous.domaine.com/mapage.php?vars=mesvars
J'ai tenté ce qui suit, sans succès :
Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([0-9]*).domaine.com/(.*)$ http://sous.domaine.com/$2[QSA,L]
J'ai également tenté ce qui suit, sans succès :
Code:
RewriteCond %{HTTP_HOST} ^([0-9]*)\.domaine\.com
RewriteRule ^/(.*)$ http://sous.domaine.com/$1 [QSA,L,R=301]
Merci d'avance pour votre aide.
 
WRInaute passionné
Bonjour

chaque sous domaine numérique a son répertoire?

si le chemin apres le sous domaine est identique, la regle suivante doit etre suffisante
Code:
Redirect Permanent / http://nouveausousomaine.NDD/
 
WRInaute discret
Merci pour votre réponse.

Non, les sous-domaines n'existent pas, ils sont, comment dire, "virtuels".

Les pages appelées peuvent être différentes :
Code:
http://12.domaine.com/mapage.php?vars=mesvars
http://345.domaine.com/autre_page.php?vars=mesvars
http://6789.domaine.com/encore_une_autre.php?vars=mesvars
vers
http://sous.domaine.com/page+vars
Précision : je ne veux rediriger que les sous-domaines "numériques" vers "sous".
Les autres ne doivent pas être redirigés (www, admin, mail...)
 
WRInaute discret
Je ne vois pas bien ce que le PHP pourrait bien y faire...

Non, je n'ai pas la main sur ces urls, elles viennent d'un appel javascript du type :
Code:
<script type="text/javascript" src="http://numéro.domaine.com/page_abc.php?vars=vars"></script>
Elles sont déjà en place sur de nombreux sites (dont je ne suis pas le propriétaire).
 
WRInaute accro
Bah si c'est un domaine en wildcard (j'en sais rien), je ne vois pas ce que le PHP ne pourrait rien y faire...
 
WRInaute discret
Merci pour le lien.

Bon, après de nombreux essais, il semble que cela n'est pas possible pour plusieurs raisons :

Si le dossier du sous-domaine n'existe pas, apache ne gère pas le rewriting/redirection pour ce qui suit dans l'url.

http://1234.domaine.com/page.html n'existe pas donc erreur 404.

La seule chose possible est de rediriger :
http://1234.domaine.com (sans le / dans le rewriteRule)) vers http://sous.domaine.com (qui lui existe)

Donc je vais bricoler autre chose.

Merci quand même pour vos commentaires.
 
WRInaute passionné
Valky a dit:
Si le dossier du sous-domaine n'existe pas, apache ne gère pas le rewriting/redirection pour ce qui suit dans l'url.
une fonction pour tester et creer le dossier si il n'existe pas peut-être? (je dis ce qui me vient a l'esprit,sans etre sûr)
 
WRInaute discret
Oui, c'est une idée, mais ça ne solutionnera pas les pages du dossier...
De plus, ces numéros de dossiers/sous-domaines sont générés aléatoirement...

Pour info, je fais tout ça pour leurrer adblock... car il semblerait qu'avec les htaccess il ne puisse pas faire grand chose.
 
WRInaute accro
Je vois tjs pas en quoi PHP ne px pas t'aider ? :roll:

Dans ton header / front controller / etc :
PHP:
<span class="syntaxdefault"><br />$subDomain&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'HTTP_HOST'</span><span class="syntaxkeyword">],&nbsp;</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'HTTP_HOST'</span><span class="syntaxkeyword">],&nbsp;</span><span class="syntaxstring">'.'</span><span class="syntaxkeyword">));<br />if&nbsp;(</span><span class="syntaxdefault">is_numeric</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$subDomain</span><span class="syntaxkeyword">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$url&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">'http://sous.domaine.com'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REQUEST_URI'</span><span class="syntaxkeyword">];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Status:&nbsp;301&nbsp;Moved&nbsp;Permanently"</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Location:&nbsp;"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$url</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;exit();<br />}<br />&nbsp;</span><span class="syntaxdefault"></span>
 
WRInaute discret
Merci sprout, mais PHP ne peut vraiment rien pour moi... :roll:

Les urls sont appelées via d'autres domaines, comme suit :
Code:
<script type="text/javascript" src="http://NUMERO_ALEATOIRE.domaine.com/page_abc.php?vars=vars"></script>
Les dossiers n'existent pas et ne contiennent donc pas de pages avec des headers.

En plus, $_SERVER['REQUEST_URI'] n'est absolument pas une donnée fiable.
 
WRInaute accro
+1 avec spout je vois pas ou est le blocage vis a vis d'un traitement php.
en revanche je vois pas plus ce qui coince avec le htaccess j'airais fait plutôt un truc comme ça :

Code:
RewriteCond %{HTTP_HOST} ^([0-9]*).example.com
RewriteRule ^(.*)$ http://sous.example.com/$1 [QSA,L,R=301]
1/ pas besoin d'escaper les points dans la condition
2/ ton slash en début de rewrite c'est pas bien vu je pense.
 
WRInaute discret
@Zeb
Merci, mais cela ne fonctionne pas avec les pages (cf mon sujet)

http://123456.example.com/unepage.php
donnera
Code:
The requested URL /unepage.php was not found on this server.
Car la page n'existe pas dans le dossier 123456 (qui lui même n'existe pas non plus).

En ce qui concerne PHP, ça n'a rien à voir, puisqu'on n'en est pas encore là avant la redirection.
Vous semblez ne pas comprendre que les pages appelées par le script n'existent pas...

$_SERVER['REQUEST_URI'] n'est absolument pas une donnée fiable
Oops, j'ai confondu avec $_SERVER["HTTP_REFERER"], autant pour moi.
 
WRInaute accro
Valky a dit:
Vous semblez ne pas comprendre que les pages appelées par le script n'existent pas...
Bah déjà faut en créer un et lui donner les moyens de gérer ... c'est sur que si tu as des liens dans tous les sens que tu ne les maitrise pas tu va pas, en plus, leur faire des dossiers physiques un par un ...
Code:
RewriteCond %{HTTP_HOST} ^([0-9]*).example.com
RewriteRule ^(.*)$ http://sous.example.com/script.php?data=$1 [QSA,L,R=301]
Tu implémente "script.php" a la racine du domaine (ou ailleurs), il va tout prendre dans le nez et il lui restera plu qu'a se démerder.
D'ailleurs je suis en train de penser que même sans la condition si ton dns est réglé pour tout envoyer sur le même dossier physique ça devrais passer. Je dis ça en passant car chez moi le CMS prend X domaines dans la figure et le htaccess envoie les datas sur des scripts précis sans se soucier de qui ça viens (c'est pris en compte derrière en php comme dit spout)
 
WRInaute passionné
Et pourquoi pas creer une serie de dossiers? après tout, ce n'est pas 20 000 dossiers vides qui vont poser un quelconque probleme au serveur, ni ralentir celui-ci. Si ce nombre st supérieur a 50 000, cela peut en effet commencer a etre plus delicat. Sinon, sur un dédié et jusqu'à 20 000, je n'hésiterais pas si cela doit me donner la solution a mon probleme.
 
WRInaute accro
longo600 a dit:
Et pourquoi pas creer une serie de dossiers?
parce qu'en plus il semble qu'il devrait y créer je sais pas combien de script par dossier. Et accessoirement c'est pas très élégant (avis perso bien sur qu'on est pas obligé de partager)
 
WRInaute discret
Merci pour ton investissement Zeb :)

Bah déjà faut en créer un et lui donner les moyens de gérer ... c'est sur que si tu as des liens dans tous les sens que tu ne les maitrise pas tu va pas, en plus, leur faire des dossiers physiques un par un ...
Non, le dossier de destination "sous" contient bien les pages/scripts. Mais pas les dossiers numériques virtuels.

Code:
RewriteCond %{HTTP_HOST} ^([0-9]*).example.com
RewriteRule ^(.*)$ http://sous.example.com/script.php?data=$1 [QSA,L,R=301]
Le $1 ne m'intéresse absolument pas.
Ce qui m'aurait intéressé c'est de récupérer ^([0-9]*).example.com/tout-ce-qui-suit.php
Mais là ça ne marchera pas pour les causes exposées précédemment.

Bon, j'ai finalement trouvé une autre solution, que je souhaitais éviter...
J'ai envoyé un message à tous mes affiliés afin qu'ils utilisent un nouveau script, qui, lui,sera plus évolutif.

Merci quand même pour votre aide.

P.S. : un conseil pour vos affiliations, régies pubs etc... appelées avec du JS, évitez de nommer vos dossiers, sous-domaines, et pages avec les mot-clés "ads", "ad", "pub"... sinon vous êtes certains que les utilisateurs d'adblock ne verront rien. Et cela vous évitera des bidouilles comme celles de ce sujet...
 
WRInaute accro
Valky a dit:
Le $1 ne m'intéresse absolument pas.
Bah c'est dommage car il contiens toutes les données relative a ta requête don le numéro de sous domaine, le dossier cible, le script les variables etc ... faut juste parser "data" pour gérer ce que tu veux faire.
 
WRInaute accro
zeb a dit:
si ton dns est réglé pour tout envoyer sur le même dossier physique ça devrais passer.
le dns ne renvoie que vers une ip. Ensuite c'est apache qui prend la main pour renvoyer sur un dossier
 
WRInaute accro
Leonick a dit:
le dns ne renvoie que vers une ip.
oui je me suis mal exprimé "si les réglages dns de ton hébergeur ("manageur")" ... (la relation domaine / dossier se fait là généralement)
 
Discussions similaires
Haut