sous domaines -pages non interpretées -> code source affi
6 messages • Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
sous domaines -pages non interpretées -> code source affi
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
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
Alors, si j'ai bien compris
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?
- 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?
Bravo ! encore un petit détail :-)
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 :
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 :
2. Indiquer un truc du genre :
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) :
Que me conseille tu ? As tu d'autres pistes ?
Merci encore !!
Jiib
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
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
Suivant ce que tu veux faire, il est possible que la règle sur get.php dans le deuxième bloc devienne obsolète.
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.
Ca marche ! Est-ce correct ?
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
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
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
Si ca marche, c'est correct
On peut essayer de nettoyer un peu, mais c'est juste pour des points de style.
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.
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.
6 messages • Page 1 sur 1
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 :
- Outil de recherche des sous-domaines d'un site
- Google surveille les sites qui créent soudainement de nombreux sous-domaines
- Bonnes pratiques de référencement : sous-domaines ou répertoires ?
- Google AdSense : Nouvelles fonctionnalités
- La commande site: dans Google
- Le code source du projet de recherche géographique est disponible
- Blog de Google sur l'Open Source
- Comment gérer simplement les sitemaps de plusieurs sites au même endroit
- Google Code Search : moteur de recherche de codes sources
- Yagoort : Yet Another Google Rank Test
Consultez la description détaillée des produits ou services de Google suivants : Google Code : Open Source Projects, Google Code, Google Web Toolkit, Google Code Project Hosting
- 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


le forum