Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/02/2012, 22h49   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Par défaut Réécriture avec code langue en début d'URL

Bonsoir _Mac_

Ca n'en finit finalement jamais et je me demande si je finirai un jour ce site web

j'ai pris 3 extensions pour le site (.fr, .co.uk, .com) le .fr et .co.uk sont destinés a mieux civler la france et le royaume uni.
le problème est que je suis hébergé sur un serveur mutualisé et ils ne permettent qu'un certificat SSL par contrat.
la solution qu'il me proposent est de créer 2 autres contrats et dupliquer les fichiers Web, solution que j'ai refusée!

ou sinon passer en serveur dédier mais là ce n'est plus la meme chose au niveau prix!

ou sinon garder UNIQUEMENT le .com puis mettre .com/fr (france) .com/uk (royaume uni)

que pense tu de ces 2 dernières solutions? y'aurait il un impact au niveau referencement?
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 23h14   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Honnêtement, je n'en ai aucune idée ! Je ne pense pas que ça change grand-chose. Faudrait faire des redirections permanentes vers les /fr et /uk, je pense. Pose la question sur le forum référencement.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 23h45   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
j'avais deja posé la question mais je n'ai malheureusement pas eu beaucoup de réponses : http://www.developpez.net/forums/d11...vs-extensions/

Je pense que je vais opter pour .com/lang et du coup quel est le moyen le plus simple de récupérer la langue avec un fichier htaccess?
un truc du genre
Code :
RewriteRule ^([a-z.{2}]+)/$ /?lang=$1 [QSA,L]
??
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h33   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
C'est correct mais attention, ça ne marche que pour les URL exactes "/fr/" par exemple. Si tu as "/fr" sans / terminal ou "/fr/untrucenplus" la règle ne sera pas exécutée.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 14h36   #5
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Ah oui c'est vrai!
Je suis null avec les expression régulières et je n'arrive pas a les retenir, je ne sais pas comment toi tu fais!!

Quelle sera la solution que tu proposes?
Sachant que je viens de me rendre compte qu'il se peut quail n'y ait pas de langue. Ca Peut être uniquement site.com (international) ou site.com/uk (royaume uni)...
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 00h36   #6
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
ça c'est mieux??
Code :
RewriteRule ^([a-z.{2}])/(.*)$ /$2?lang=$1 [QSA,L]
mais je ne suis pas sur que ça marche a tous les coups. par exemple
site.com/fr/contact.php?par=2 sera transformé en site.com/contact.php?par=2?lang=fr
comment a ton avis pourrais je régler ce problème??

Merci
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 21h56   #7
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Ce sera transformé en site.com/contact.php?lang=fr&par=2. C'est quoi le problème ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h23   #8
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Umm, c'est juste que j'ai cru que ça bugera si l'URL contient déjà des paramètres... Je vais tester et te tiens au courant

Il y a un cas a traiter sur lequel j'aimerais te demander ton avis
Sous quelle forme me conseilles tu mettre le site par défaut:
- site.com
- site.com/us ??
Histoire d'avoir toujours le code pays après le .com

J'ai remarque que le site de Apple.com met tjrs le code pays après .com sauf pour les USA ou c'est toujours que .com

Quelle stratégie me recommandes tu?

Merci infiniment
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 17h12   #9
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
j'ai essayé ce code mais ça ne marche pas: error 404
Code :
RewriteRule ^([a-z.{2}])/(.*)$ /$2?lang=$1 [QSA,L]
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 17h54   #10
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Après quelques recherches, j'ai enfin réussi a faire fonctionner la ligne RegEx que voici le code:
Code :
RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
mais j'ai 2 cas qui ne sont pas gérés
1. Quand il n'y a pas le slash a la fin, comment pourrais toujours forcer un slash a la fin pour les dossiers?

2. Quand c'est uniquement site.com/en/ (rien après le dossier de la langue)

Aurais tu stp une solution?
Merci
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 21h47   #11
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Pour la question 1 : si c'est un vrai dossier (ou répertoire), il y a de fortes chances qu'Apache rajoute tout seul le / à la fin, mais si ce n'est pas pas un vrai dossier comme le code de langue, il faut écrire une règle de redirection pour ce cas :
Code :
RewriteRule ^[a-z]{2}$ $0/ [R,L]
Pour le deuxième cas, c'est idem, il faut écrire une règle spécifique :
Code :
RewriteRule ^([a-z]{2})/$ page_par_defaut.php?lang=$1 [QSA,L]
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2012, 00h01   #12
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
Pour la question 1 : si c'est un vrai dossier (ou répertoire), il y a de fortes chances qu'Apache rajoute tout seul le / à la fin, mais si ce n'est pas pas un vrai dossier comme le code de langue, il faut écrire une règle de redirection pour ce cas :
je viens de faire le test sur des vrai dossiers que j'ai, lorsque je ne mets pas le slash, il n'est pas automatiquement rajouté, et je pense que c'est meme mauvais d'avoir 2 URL différente avec le meme contenu:
site.com/account et site.com/account/

Citation:
Pour le deuxième cas, c'est idem, il faut écrire une règle spécifique :
on ne peut pas faire un truc du genre:
Code :
RewriteRule ^([a-z]{2})/(.*) ou_rien$ /$2?lang=$1 [QSA,L]
??
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2012, 18h31   #13
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Pour le 1 : tu peux essayer en mettant DirectorySlash On dans le .htaccess à la racine du site. Essaie aussi en désactivant la négociation de contenu (Options -MultiViews), je pense que ça peut jouer.

Pour le 2 : je ne suis pas sûr que ce soit faisable car il faudrait mettre des parenthèses dans des parenthèses et je ne sais pas comment mod_rewrite se comporte dans ce cas. Le plus simple c'est de faire 2 règles.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2012, 17h00   #14
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
Code :
RewriteRule ^[a-z]{2}$ $0/ [R,L]
ca n'a pas marché, il a fallu que je rajoute un slash comme ceci
Code :
RewriteRule ^[a-z]{2}$ /$0/ [R,L]
est ce un pur hasard ou est ce la solution ??

Citation:
Code :
RewriteRule ^([a-z]{2})/$ page_par_defaut.php?lang=$1 [QSA,L]
je ne comprends pas pourquoi mais là ça marche bien sans cette ligne de RegEx, je ne sais pour quelle raison ça ne marchais pas avant, voici ce que j'ai actuellement:
Code :
RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
j'aurais 2 dernières questions STP

1- avec la réécriture ci dessous, ça ne marche pas lorsque je mets site.com/uk/account (sans slash), ça me redirige vers site.com/account/?lang=uk
sais tu pourquoi?

2- j'essaie d'avoir toujours juste .com pour l'anglais US, et .com/uk pour le Royaume uni. je ne devrais donc jamais avoir .com/us dans l'url. j'ai essaye ça mais ça ne marche pas
Code :
RewriteRule ^us/$ / [R,L]
je sais que ça ne gérera pas le cas où quelqu'un met site.com/us/page.php
aurais tu une solution?
avant d'aller plus loin, me conseilles tu de rediriger site.com/us vers site.com ou tout simplement afficher une erreur 404 ?

Merci mille fois
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2012, 21h05   #15
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Citation:
Envoyé par redah75 Voir le message
1- avec la réécriture ci dessous, ça ne marche pas lorsque je mets site.com/uk/account (sans slash), ça me redirige vers site.com/account/?lang=uk
sais tu pourquoi?
C'est parce que le [L] ne fait pas exactement ce que tu crois qu'il fait. Il arrête la boucle de réécriture en cours mais n'arrête pas le processus de réécriture. Lorsqu'Apache a fait des réécritures, il repasse de nouveau toutes les règles pour voir si l'URL obtenue est définitive, des fois qu'il y ait d'autres règles à appliquer. La réécriture ne s'arrête réellement que lorsqu'une URL n'est plus réécrite. Dans ton cas, Apache construit une première fois l'URL que tu cherches : /account?lang=uk, mais Apache repasse ensuite toutes les règles, notamment la règle qui ajoute un / à la fin des répertoires quand il n'y en a pas, donc Apache transforme l'URL en /account/?lang=uk et redirige le navigateur.


Citation:
Envoyé par redah75 Voir le message
2- j'essaie d'avoir toujours juste .com pour l'anglais US, et .com/uk pour le Royaume uni. je ne devrais donc jamais avoir .com/us dans l'url. j'ai essaye ça mais ça ne marche pas
Code :
RewriteRule ^us/$ / [R,L]
je sais que ça ne gérera pas le cas où quelqu'un met site.com/us/page.php
aurais tu une solution?
Ca ne marche pas signifie quoi exactement ? Dans la règle que tu donnes il faut que l'URL finisse par un / : http://site.com/us/.

Citation:
Envoyé par redah75 Voir le message
avant d'aller plus loin, me conseilles tu de rediriger site.com/us vers site.com ou tout simplement afficher une erreur 404 ?
Clairement la redirection.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2012, 21h42   #16
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
C'est parce que le [L] ne fait pas exactement ce que tu crois qu'il fait. Il arrête la boucle de réécriture en cours mais n'arrête pas le processus de réécriture. Lorsqu'Apache a fait des réécritures, il repasse de nouveau toutes les règles pour voir si l'URL obtenue est définitive, des fois qu'il y ait d'autres règles à appliquer. La réécriture ne s'arrête réellement que lorsqu'une URL n'est plus réécrite. Dans ton cas, Apache construit une première fois l'URL que tu cherches : /account?lang=uk, mais Apache repasse ensuite toutes les règles, notamment la règle qui ajoute un / à la fin des répertoires quand il n'y en a pas, donc Apache transforme l'URL en /account/?lang=uk et redirige le navigateur.
Merci pour l'explication détaillée. mais je ne vois par contre toujours pas comment palier a ce problème quelle modification porter sur la ligne RegEx??

Citation:
Ca ne marche pas signifie quoi exactement ? Dans la règle que tu donnes il faut que l'URL finisse par un / : http://site.com/us/
meme avec un slash a la fin, ça ne change rien, si je tape site.com/us/ ou site.com/us/page.php, rien ne se passe, aucune redirection!

Bonne soirée
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 00h17   #17
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Ben je ne vois pas comment on peut corriger le problème si ce n'est ne plus forcer l'ajout d'un / à la fin pour les répertoires. Car en effet, Apache ne sait pas faire la différence entre un répertoire qui n'existe pas et un fichier qui n'existe pas non plus

Pour le reste, peux-tu donner le .htaccess complet ? Il se peut qu'il y ait un "conflit" avec une autre règle.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 13h41   #18
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Citation:
Ben je ne vois pas comment on peut corriger le problème si ce n'est ne plus forcer l'ajout d'un / à la fin pour les répertoires. Car en effet, Apache ne sait pas faire la différence entre un répertoire qui n'existe pas et un fichier qui n'existe pas non plus
D'accord, et comment forcer un slash a la fin pour les répertoires??
j'avais trouvé ce code mais il ne fonctionne pas très bien:
Code :
1
2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]
Citation:
Pour le reste, peux-tu donner le .htaccess complet ? Il se peut qu'il y ait un "conflit" avec une autre règle.
le voici:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## activate rewriting rules
RewriteEngine on

## rewriting rules for the .com, keep only moroccan-arts.com as an official URL for international english
RewriteCond %{HTTP_HOST} \.com$
RewriteCond %{HTTP_HOST} !www\.moroccan-arts\.com$
RewriteRule (.*) http://www.moroccan-arts.com/$1 [L,R=301]

## rewriting rules for the .co.uk, redirect all to moroccan-arts.com/uk/
RewriteCond %{HTTP_HOST} \.co\.uk$
RewriteRule (.*) http://www.moroccan-arts.com/uk/$1 [L,R=301]

## rewriting rules for the .fr, redirect all to moroccan-arts.com/fr/
RewriteCond %{HTTP_HOST} \.fr$
RewriteRule (.*) http://www.moroccan-arts.com/fr/$1 [L,R=301]

## folders of languages
RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
RewriteRule ^[a-z]{2}$ /$0/ [R,L]
#RewriteRule ^us/$ / [R,L]

## catalogue browser
RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{2})([0-9]{2})/$ /catalogue.php?id_cat1=$1&id_cat3=$2 [QSA,L]

## product details
RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{6})\.html$ /product-info.php?id_prod_material=$1 [QSA,L]
les premières règles du .co.uk vers le .com/uk/ n'ont pas encore été testées, penses tu qu'elles sont correctes??
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 21h03   #19
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 302
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 302
Points : 8 583
Points : 8 583
Comme je te disais, la redirection pour ajouter un / à la fin est problématique pour les dossiers qui ne sont pas de vrais dossiers. Donc Apache ne qu'appliquer la règle systématiquement ou jamais. Pour les vrais dossiers, il faut compléter la règle avec un RewriteCond -d :
Code :
1
2
3
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .*[^/]$ /$0/ [L,R=301]
Il faut mettre la redirection pour /us/ en premier, avant celle en ^([a-z]{2})/(.*)$ car cette secondes matche la première URL :
Code :
1
2
3
RewriteRule ^us/$ / [R,L]
RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
RewriteRule ^[a-z]{2}$ /$0/ [R,L]
La règle en .co.uk semble correcte.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 00h07   #20
Membre du Club
 
Inscription : novembre 2007
Messages : 757
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 757
Points : 44
Points : 44
Oui oui j'avais bien compris qu'apache a du mal a différencier les dossiers 'vrais' des dossiers 'virtuels'
Mais la ce qui est bizarre c'est qu'il s'agit d'un vrai dossier (/account/)
J'ai mis le code que tu m'as file mais ça ne marche toujours pas lorsque je saisis site.com/uk/account (sans slash) il me redirige vers site.com/account?lang=uk

Concernant la redirection de /us, ça bien marche merci. Mais pourquoi pour cette ligne on met [R,L] et pour la dernière ligne [QSA,L] ??
redah75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h29.


 
 
 
 
Partenaires

Hébergement Web