Traiter les langues dans .htaccess

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]