Il faut que tu mettes cette règle tout en haut de ton fichier.
Il faut que tu mettes cette règle tout en haut de ton fichier.
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
je l'ai mise tout au début mais ça ne change rien, quand je tape https://www.moroccan-arts.com/uk/account ça me redirige toujours vers https://www.moroccan-arts.com/account/?tld=uk
tu ne penses pas que quelque chose cloque avec cette ligne:
voici mon htaccess en entier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35 # some PHP rules are set in an .htaccess file in / ## activate rewriting rules RewriteEngine on ## force trailing slash RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} -d RewriteRule .*[^/]$ /$0/ [L,R=301] ## 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 ^us/$ / [R,L] RewriteRule ^us/(.*)$ /$1 [R,L] RewriteRule ^[a-z]{2}$ /$0/ [R,L] RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,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]
account est un vrai répertoire qui existe ?
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
Oui, c'est un vrai dossier qui existe!!
et ce qui est vraiment bizarre dans toute cette histoire c'est qui si je commente cette ligne: RewriteCond %{REQUEST_FILENAME} -d
site.com/uk/account est redirigé vers site.com/uk/account/
MAIS site.com/fr/account est redirigé vers site.com/account/?tld=fr
Je ne comprends plus rien
En gros, il y a redirection parce que la première URL réécrite /account?tld=uk correspond à un répertoire qui existe (si tu retires la query string) et qui ne se termine pas par un /, donc au second tour de réécriture, Apache fait la redirection.
Tu peux mettre ceci :
mais je ne suis pas sûr que ça aille pour toutes les URL. L'alternative est d'ajouter un paramètre d'URL bidon que tu vérifies dans la règle de redirection sur le répertoire ne se terminant pas par / pour ne pas réécrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ## force trailing slash RewriteCond %{QUERY_STRING} !noredirect=true RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} -d RewriteRule .*[^/]$ /$0/ [L,R=301] ... RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1&noredirect=true [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
On y est presque
j'ai mis
et ça marche bien a un petit détail près
Code : Sélectionner tout - Visualiser dans une fenêtre à part RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
avectout au début comme tu me l'as conseillé, ça ne force pas le slash a la fin site.com/uk/account reste tel quel!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} -d RewriteRule .*[^/]$ /$0/ [L,R=301]
si par contre je commenteil rajoute le slash a la fin pour les dossiers MAIS il me le rajoute aussi pour la page détails du produits (http://www.moroccan-arts.com/lantern...-4-101115.html)
Code : Sélectionner tout - Visualiser dans une fenêtre à part RewriteCond %{REQUEST_FILENAME} -d
sais tu de quoi il peut s'agir??
Merci infiniment
Pourquoi tu veux commenter cette ligne si ça marche avec ? Cette ligne sert à dire à Apache d'ajouter un / à la fin d'une URL sans / terminal si cette URL correspond à un vrai répertoire. Donc forcément, si tu retires cette condition, toutes les URL ne se terminant pas par / sont redirigées.
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
Ben justement ça ne marche pas quand la ligne est decommentée.
Il faut que je commente la ligne pour qu'il rajoute les slash a la fin des dossiers, ce qui est très bizarre...!
La ligne est maintenant commentée, teste et tu verras!
Je ne sais pas trop ce qu'il se passe. Tu as essayé l'autre solution que j'ai donné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
la je suis en deplqcement et je n'ai pas trop acces a internet. je testerai ce que tu m'as propose des que j'ai l'occas et t'en tiendrai au courant...
Merci pour tout
Bonjour _Mac_
effectivement, ça ne marche pas pour toutes les URL comme par exemple pour http://www.moroccan-arts.com/lantern...-4-101115.html qui me rajoute un slash a la fin!Tu peux mettre ceci :
mais je ne suis pas sûr que ça aille pour toutes les URL
Code : Sélectionner tout - Visualiser dans une fenêtre à part RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
ça non plus ça ne règle pas le problème!L'alternative est d'ajouter un paramètre d'URL bidon que tu vérifies dans la règle de redirection sur le répertoire ne se terminant pas par / pour ne pas réécrire...
mais voici la solution que j'ai trouvé et qui a l'air de bien marcher a tous les cas:
J'ai viré la ligne rouge, et rajouté la ligne verte!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ## activate rewriting engine RewriteEngine on ## force trailing slash RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_URI} !^/.*\.(php|html)$ RewriteRule .*[^/]$ /$0/ [L,R=301] ## folders of languages RewriteRule ^us/(.*)$ /$1 [R,L] RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,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]
Impressionnant mais ça marche bien! as tu une explication a ceci ? ou y a t il une amélioration du code??
A bientôt
Bonsoir,
De retour pour quelques détails
j'ai trouve un "meilleur" code pour forcer un slash a la fin et qui fonctionne bien, je le poste au cas ou ça intéresse quelqu'un
j'aurais 3 petites dernières question STP
1- est ce bien utile et important cette histoire de slash a la fin des URL??
2- quand j'ai une erreur 404, c'est le message en anglais qui est affiché, comment pourrais je conserver le code de la langue?
3- lorsque je suis sur http://www.moroccan-arts.com/uk/test-index.php et que j'enlève le '-', il me redirige vers http://www.moroccan-arts.com/test-index.php?tld=uk, je pense que ça vient de l'hébergeur, je sais qu'ils ont une sorte de script qui corrige les url, genre tu tapes inde.php, tu es redirigé vers la bonne url qui est index.php. dois je les contacter pour ce problème?
Merci beaucoup
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ## activate rewriting engine RewriteEngine on ## force trailing slash RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [L,R=301] ## folders of languages RewriteRule ^us/(.*)$ /$1 [R,L] RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,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] ## error pages ErrorDocument 403 /error-403.html ErrorDocument 404 /error-404.html ErrorDocument 500 /error-500.html ## Redirect the error pages (403, 404, 500, javascript deactivated) RewriteRule ^error-(403|404|500)\.html$ /error.php?error=$1 [QSA,L]
Absolument pas. C'est toi qui vois.
C'est un message à toi ou le message d'erreur par défaut d'Apache ? Le mieux c'est que tu utilises tes propres pages d'erreur (directive ErrorDocument) qui sont en fait des pages PHP qui gèrent le code de langue. L'intérêt de tes propres pages d'erreur, en dehors de l'aspect langue, est que tu peux conserver un joli affichage cohérent avec ta charte graphique.
Non, ça doit être parce que la négociation de contenu Apache est activée par défaut. Il faut que tu mettes ceci tout en haut de ton .htaccess :
Mais attention, cela peut avoir une influence sur le comportement de ton site et tes réécritures notamment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Options -MultiViews
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
c'est un message a moi, et voici justement le code que je mets:C'est un message à toi ou le message d'erreur par défaut d'Apache ? Le mieux c'est que tu utilises tes propres pages d'erreur (directive ErrorDocument) qui sont en fait des pages PHP qui gèrent le code de langue. L'intérêt de tes propres pages d'erreur, en dehors de l'aspect langue, est que tu peux conserver un joli affichage cohérent avec ta charte graphique.
le problème c'est qu'il me redirige toujours vers /error-404.html (page US) quelque soit la langue. comment pourrais je récupérer le code de la langue pour afficher le message dans la langue appropriée??
Code : Sélectionner tout - Visualiser dans une fenêtre à part ErrorDocument 404 /error-404.html
Tu dois déclarer cette page PHP dans ton ErrorDocument à la place de ta page .html, et dans cette page PHP, il faut que tu récupères la langue. Ca peut être simple comme ça peut être compliqué. Si le code de langue figure toujours dans l'URL qui figure dans la barre d'adresse du navigateur, tu dois pouvoir récupérer cette URL, donc le code de langue avec une variable de $_SERVER. Mais le problème c'est qu'il faut parser cette URL pour retrouver le code de langue. Du coup, le plus simple c'est peut-être de stocker et récupérer en session le code de langue, si tu utilises les sessions, bien sûr.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager