es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear subcarpetas falsos de múltiples idiomas para el sitio web.

Me gustaría saber si es posible crear falsos subdirectorios para mi sitio web multilingüe, actualmente uso este código para cambiar entre los dos idiomas que tengo (italiano e inglés)

<?php
session_start();

$langs = ["en", "it"];

$current_lang = "en";

if (isset($_GET["lang"]))
{
    $lang = $_GET["lang"];
    if (in_array($lang, $langs, true))
        $current_lang = $lang;

}
elseif (!isset($_SESSION["lang"]))
{

    if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
    {
        $acceptLang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
        if (strlen($acceptLang) > 2)
        {
            $acceptLang = strtolower(substr($acceptLang, 0, 2));
            if (in_array($acceptLang, $langs, true))
                $current_lang = $acceptLang;
        }
    }
}
else
    $current_lang = $_SESSION["lang"];

$_SESSION["lang"] = $current_lang;


require_once "languages/$current_lang.php";
?>

Entonces, cada vez que quiero cambiar de idioma, agrego al final de la URL ?lang=neededLanguage.php

También uso estas reglas de reescritura para ocultar el .php

Options +SymLinksIfOwnerMatch 

RewriteEngine on

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]

Esto es lo que tengo que hacer para cambiar de idioma ahora mismo:
https://example.com/?lang=en
https://example.com/blog?lang=en

Me gustaría saber si es posible que las dos URL anteriores parezcan algo como estas:
https://example.com/en/
https://example.com/en/blog

También la parte del blog de la URL es un archivo .php.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible crear subcarpetas falsas para tu sitio web multilingüe usando mod-rewrite. Puedes agregar las siguientes reglas a tu archivo .htaccess:

    Options +SymLinksIfOwnerMatch 
    RewriteEngine on
    
    # Rewrite /en/ to ?lang=en
    RewriteRule ^([a-z]{2})/?$ ?lang=$1 [NC,QSA,L]
    
    # Rewrite /en/blog to blog.php?lang=en
    RewriteRule ^([a-z]{2})/(.*)$ $2.php?lang=$1 [NC,QSA,L]
    

    Estas reglas reescribirán las URL como https://example.com/en/` ahttps://example.com/?lang=en` y https://example.com/en/blog` ahttps://example.com/blog.php?lang=en`.

    Cabe destacar que la regla RewriteRule para la URL del blog asume que la parte del blog de la URL es el nombre de un archivo .php. Si tu blog se implementa de manera diferente, es posible que debas ajustar la regla en consecuencia.

Comments are closed.