sous domaines -pages non interpretées -> code source affi

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

jiib75
Nouveau WRInaute
 
Messages: 10
Inscription: Jeu Déc 11, 2003 0:07

sous domaines -pages non interpretées -> code source affi

Message le Jeu Déc 11, 2003 0:33

Bonjour a tous,

J'utilise actuellement une règle (qui fonctionne mais peut être n'est elle pas la meilleure car je suis pas très bon en mod_rewrite) qui permet de rediriger une requete foo.site.com vers le repertoire users/foo.

RewriteCond ${lowercase:%{HTTP_HOST}} !^$
RewriteCond ${lowercase:%{HTTP_HOST}} !^www\.site.com$
RewriteCond ${lowercase:%{HTTP_HOST}} ^(www\.|)([^.]+)\.site\.com$
RewriteRule ^(.+) ${lowercase:%{HTTP_HOST}}$1 [C]
RewriteRule ^(www\.|)([^.]+)\.site\.com(.*) /users/$2$3 [C]

Actuellement donc la page foo.site.com/archive.html est chargée à partir de users/foo/archive.html

Je souhaite maintenant effectuer la manip suivante :
tous les repertoires demandés sur foo.site.com doivent correspondre à l'exemple ci-dessous :

foo.site.com/article/ -> /dyn/get.php?site=foo&template=article
foo.site.com/dossier/ -> /dyn/get.php?site=foo&template=dossier

Quelle serait alors la commande ? J'imagine que c'est une suite aux RewriteRule ci-dessus( et que la ligne doit se terminer par [L] )


De plus, j'utilise également des pages ColdFusion, et lorsque j'applique des régles de réecritures du genre foo.html -> foo.cfm, la page restituée est le code source de la page ColdFusion !
Alors que cette page se trouve dans un repertoire ou tout fichier cfm est interprété par Coldfusion. Cela ne se produit pas pour PHP par contre.


Merci beaucoup pour votre aide et bravo pour le contenu de ce site.

Jiib75

nikoshr
WRInaute impliqué
WRInaute impliqué
 
Messages: 320
Inscription: Jeu Juil 10, 2003 5:49

Message le Jeu Déc 11, 2003 10:37

Alors, si j'ai bien compris

Code: Tout sélectionner
RewriteCond %{HTTP_HOST}   !^www\.site.com$ [NC]
RewriteCond %{HTTP_HOST}   ^[^.]+\.site\.com$ [NC]
RewriteRule ^(.+)      %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/([^\/]+)\/$   /$1/dyn/get.php?site=$1&template=$2          [PT,L]
RewriteRule ^([^.]+)\.site\.com/(.*)      /$1/$2          [L]


J'ai retiré les lowercase essentiellement parce que mon système ne veut rien savoir et qu'ils peuvent être remplacés par [NC] dans les RewriteCond.

J'ai pris pour hypothèse que seuls les appels de répertoire devaient être passés au script et que les appels de fichiers continuaient leur route vers le système, et que chaque sous-domaine avait son fichier get.php. En gros, quand on appelle un répertoire à la racine, c'est transféré au fichier php, pour le reste, c'est le fichier sur le disque correspondant. On peut bien entendu faire autrement.

Le flag PT dans la deuxième transformation est là pour les appels ColdFusion, il sert à donner la main à d'autres modules après réécriture. C'est peut-être la solution à ton problème d'affichage de source.

J'ai bon?

jiib75
Nouveau WRInaute
 
Messages: 10
Inscription: Jeu Déc 11, 2003 0:07

Bravo ! encore un petit détail :-)

Message le Ven Déc 12, 2003 0:06

Merci mille fois nikoshr ! Tu as tout bon !

Cela fonctionne bien en effet, et je n'ai plus de probleme d'affichage des sources.
La règle de réécriture des urls fonctionne également (tu as même simplifié les choses)

Par contre maintenant, j'ai un probleme avec les liens à l'interieur des pages dynamiques, qui ne sont plus valides lorsqu' il y a le sous domaine devant :


Voici l'une des règles basée sur ton exemple que j'utilise :
Code: Tout sélectionner
RewriteRule ^([^.]+)\.site\.com/message/([^\/]+)\/$ /cfm/tools/comments/?bid=$1&pid=$2 [PT,L]


se traduit par :
foo.site.com/message/num/ -> cfm/tools/comments/?bid=foo&pid=num

Pour remédier au problème, j'ai pensé à 2 solutions :

1. Réecrire l'url avec l'adresse www complète, mais je n'arrive pas à ce qu'elle soit masquée par le navigateur.
Voici alors mon code :

Code: Tout sélectionner
RewriteRule ^([^.]+)\.site\.com/message/([^\/]+)\/$ http://www.site.com/cfm/tools/comments/?bid=$1&pid=$2 [L]


2. Indiquer un truc du genre :

Code: Tout sélectionner
RewriteRule ^([^.]+)\.site\.com/(.*) /$2 [L]


Pour que 8.site.com/image.gif soit cherché dans le bon répertoire, mais du coup ca fout en l'air la règle qui allait chercher dans le repertoires des utilisateurs les fichiers html (cf premier post) :
Code: Tout sélectionner
RewriteRule ^([^.]+)\.site\.com/(.*) /users/$1/$2 [L]


Que me conseille tu ? As tu d'autres pistes ?
Merci encore !!

Jiib

nikoshr
WRInaute impliqué
WRInaute impliqué
 
Messages: 320
Inscription: Jeu Juil 10, 2003 5:49

Message le Ven Déc 12, 2003 9:19

La première solution force une redirection puisque tu indiques un domaine complet.

Je pense que la solution est d'écrire un autre bloc de règles qui réécrira les URL pour tous les sous-domaines, y compris www.

Ca donne
Code: Tout sélectionner
RewriteCond %{REQUEST_URI}   ^\/message/[^\/]+\/$ [NC]
RewriteRule ^(.+)   %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/message/([^\/]+)\/$ /cfm/tools/comments/?bid=$1&pid=$2 [PT,L]


RewriteCond %{HTTP_HOST}   !^www\.site.com$ [NC]
RewriteCond %{HTTP_HOST}   ^[^.]+\.site\.com$ [NC]
RewriteRule ^(.+)      %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/([^\/]+)\/$   /$1/dyn/get.php?site=$1&template=$2          [PT,L]
RewriteRule ^([^.]+)\.site\.com/(.*)      /$1/$2          [L]


Suivant ce que tu veux faire, il est possible que la règle sur get.php dans le deuxième bloc devienne obsolète.

jiib75
Nouveau WRInaute
 
Messages: 10
Inscription: Jeu Déc 11, 2003 0:07

Ca marche ! Est-ce correct ?

Message le Ven Déc 12, 2003 20:55

Merci encore pour la rapidité de ta réponse.

Voici mes règles finales, j'ai ajouté un bloc (2eme) pour le repertoire users, car le dernier bloc ne suffisait pas.

Voici une description de ce que fait chaque bloc :

Pour ces 3 blocs, la condition est que ce doit être un sous-domaine. (et pas www)

1. Pour un URL foo.com/message/xxx ou foo.com/message/xxx/ renvoie vers un script coldfusion.

2. Pour un URL foo.com/xxx.xxx (page html, image, etc) renvoie vers le repertoire users ou sont stockés les document statiques

3. Pour tout le reste, renvoie vers le repertoire qui aurait été utilisé pour www



Code: Tout sélectionner
RewriteCond %{HTTP_HOST}   !^www\.site.com$ [NC]
RewriteCond %{HTTP_HOST}   ^[^.]+\.site\.com$ [NC]
RewriteCond %{REQUEST_URI}   ^\/message/(.*) [NC]
RewriteRule ^(.+)   %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/message/([^\/]+) /cfm/tools/comments/?bid=$1&pid=$2 [PT,L]
RewriteRule ^([^.]+)\.site\.com/(.*)      /$2          [L]

RewriteCond %{HTTP_HOST}   !^www\.site.com$ [NC]
RewriteCond %{HTTP_HOST}   ^[^.]+\.site\.com$ [NC]
RewriteCond %{REQUEST_URI}   ^\/[^\/]+\.[^\/]+$ [NC]
RewriteRule ^(.+)   %{HTTP_HOST}$1
RewriteRule ^([^.]+)\.site\.com/(.*) /users/$1/$2 [L]


RewriteCond %{HTTP_HOST}   !^www\.site.com$ [NC]
RewriteCond %{HTTP_HOST}   ^[^.]+\.site\.com$ [NC]
RewriteRule ^(.+)      %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/(.*) /$2 [L]


Est-ce correct ?

En tout cas, ca fonctionne, peut-être que l'on peut simplifier encore, ou qu'il y a un cas que je n'ai pas vu..

Merci encore, je n'y serai pas arrivé sans ton aide !

Jiib

nikoshr
WRInaute impliqué
WRInaute impliqué
 
Messages: 320
Inscription: Jeu Juil 10, 2003 5:49

Message le Sam Déc 13, 2003 9:46

Si ca marche, c'est correct :)
On peut essayer de nettoyer un peu, mais c'est juste pour des points de style.

Code: Tout sélectionner
RewriteCond %{HTTP_HOST}   ^www\.site\.com$ [NC]
RewriteRule .*   -          [L]

RewriteCond %{REQUEST_URI}   ^\/message\/(.*) [NC]
RewriteRule ^(.+)   %{HTTP_HOST}$1          [C]
RewriteRule ^([^.]+)\.site\.com/message/([^\/]+) /cfm/tools/comments/?bid=$1&pid=$2 [PT,L]

RewriteCond %{REQUEST_URI}   ^\/[^\/]+\.[^\/]+$ [NC]
RewriteRule ^(.+)   %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.site\.com/(.*) /users/$1/$2 [L]


Il manquait un chainage avec la règle de réécriture dans le bloc users. Donc :

1/ tout ce qui passe par www n'est pas réécrit, on ne fait rien (le tiret dans la règle) et on dégage
2/ si on croise une URL avec /message/ dedans, on envoie ca vers ColdFusion. J'ai retiré la deuxième ligne qui ne faisait que remettre l'URL dans l'état initial, ce qu'on peut éviter avec les conditions ad hoc. Mais j'ai peut-être oublié un cas.
3/ si c'est un fichier à la racine, il est appelé dans le répertoire users correspondant
4/ dans tous les autre cas, on ne fait rien, donc pas de règle

Je n'ai pas testé, il y a (probablement) des choses à rectifier.


Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Lister les sous-domaines
    Cet outil vous permet de trouver la liste des sous-domaines (indexés) d'un site.
  • Test HTTP header
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités