.htaccess rule para la detección de idioma

Tengo un problema con .htaccess. Mi estructura de servidor de archivos simplificada es la siguiente:

/index.php /signup.php 

Necesito trabajar con URL virtuales para manejar el cambio de idioma:

 www.mydomain.com/en/signup.php www.mydomain.com/de/signup.php 

entonces mi .htaccess debería verificar si url contiene / en / o / de / y traducirlo a, por ej. /signup.php?language=de

Básicamente hablado, debe quitar la etiqueta de idioma pero mantener el rest de la estructura de la carpeta.

debería funcionar tanto en mi xampp local como en mi servidor en vivo. ¿algunas ideas? Gracias

¿Qué has intentado hasta ahora? Algo como lo siguiente debería funcionar:

 RewriteRule ^/(en|de)/(.*)$ $2?language=$1 [L] 

El significado es bastante obvio: tomar la segunda coincidencia ( $2 ), eso es lo que viene después de la segunda barra en la URL, posponer un ?language= después de ella, y luego la primera coincidencia ( $1 ), es decir, lo que está entre la primera dos barras – siempre que sea una de en o de . Si quiere hacer coincidir algo (no solo en o de ) como idioma, cambie la regla a:

 RewriteRule ^/(.+?)/(.*)$ $2?language=$1 [L] 

Tenga en cuenta : el ? en el primer grupo hará que la coincidencia se detenga en la primera barra, de modo que no se reescribirá, por ejemplo.

 /en/subdir/pippo.php 

a

 pippo.php?language=en/subdir 

sino más bien

 subdir/pippo.php?language=en 

En caso de dudas, hay una excelente documentación en el sitio web de Apache.


Editar: idioma predeterminado

Para hacer que todas las demás solicitudes (es decir, las URL que no comienzan con /en/ o /de/ ) redirijan a un idioma predeterminado (digamos en ), primero debe conocer los prefijos de idioma que desea reconocer y luego usar las siguientes reglas – A continuación, supongo que hay tres -3- idiomas, con códigos en , de y fr :

 RewriteEngine On RewriteBase / RewriteRule ^(en|de|fr)/(.*)$ $2?language=$1 [L,QSA] RewriteRule ^(.*)$ $1?language=en [L,QSA] 

Si no define el idioma exacto establecido en la primera RewriteRule (por ejemplo, utilizando mi solución anterior de “cualquier idioma”), la detección del idioma podría fallar en las páginas anidadas. Es importante que las reglas estén en este orden porque la primera coincidirá con el código de idioma y luego saldrá, mientras que la segunda se aplicará solo si la primera no coincide.