Je veux résoudre le problème suivant:
1) Lorsque vous entrez l’URL sans langue, utilisez la langue anglaise comme exemple par défaut:
http // localhost / plantes / ou http // localhost / plants
ou
http // localhost / plantes / boutique / accessoires
2) Lorsque vous entrez l’URL avec la langue, transmettez ce paramètre comme langue à utiliser, par exemple:
http // localhost / plantes / es / shop / accessoires
ou
http // localhost / plantes / es / ou http // localhost / plants / es
Jusqu’à présent, j’ai essayé:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(en|es)/(.*)$ index.php?url=$2&lang=$1 [L,QSA] RewriteRule ^(.*)$ index.php?url=$1&lang=en [L,QSA]
Si je commente le premier RewriteRule et que je saisis une URL, cela fonctionne bien mais utilise toujours le langage en.
Si je commente le deuxième RewriteRule et que j’utilise une URL avec le langage:
http // localhost / plantes / es /
ou
http // localhost / plantes / es / shop / accessoires
Cela fonctionne bien, mais il ne définit pas la langue par défaut pour l’anglais quand n’est pas donné.
Une idée pourquoi ça ne marche pas quand je laisse les deux règles?
Merci
Ps: j’ai enlevé le: après http
Si plants
est la racine de votre document, vous devriez pouvoir utiliser cette règle.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -l RewriteRule ^ - [L] RewriteCond %{REQUEST_URI} !/(en|es) RewriteRule ^(.*)/?$ index.php?url=$1&lang=en [L,QSA] RewriteRule ^(en|es)/?(.*)/?$ index.php?url=$2&lang=$1 [L,QSA]
Faites moi savoir comment ça marche pour vous.
Trouvé une solution en procédant ainsi:
RewriteEngine On
RewriteCond% {REQUEST_FILENAME}! -F
RewriteCond% {REQUEST_FILENAME}! -D
RewriteCond% {REQUEST_FILENAME}! -L
RewriteRule ^ (en | es) / (. *) $ Index.php? Url = $ 2 & lang = $ 1 [L, QSA]
RewriteCond% {REQUEST_FILENAME}! -F
RewriteCond% {REQUEST_FILENAME}! -D
RewriteCond% {REQUEST_FILENAME}! -L
RewriteRule ^ (. *) $ Index.php? Url = $ 1 & lang = fr [L, QSA]
Comment puis-je améliorer cela? Je me sens mal je dois écrire deux fois le même Cond
Placez le fichier htaccess suivant dans le répertoire /plants
:
RewriteEngine On RewriteBase /plants RewriteCond %{REQUEST_URI} !^/plants/e[ns](/|$) [NC] RewriteCond %{QUERY_STRING} !lang=e[ns] [NC] RewriteRule ^.*$ /plants/en/$0 [R=301,L] RewriteRule ^(e[ns])/(.*)$ index.php?url=$2&lang=$1 [NC,L,QSA]
Si ce qui précède ne fonctionne toujours pas, mettez à jour votre propre approche pour quelque chose comme:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -l RewriteRule ^ - [L] RewriteRule ^(en|es)/(.*)$ index.php?url=$2&lang=$1 [L,QSA] RewriteRule ^(.*)$ index.php?url=$1&lang=en [L,QSA]