Question

J'ai 3 sous-domaines, qui sont basés sur OpenCart. Ce que j'ai besoin pour forcer sur chaque domaine donné la langue

Pour ce faire, _get ['Langue'] devrait être défini strictement pour chaque sous-domaine

en.handmade24.at -> langue = en

ru.handmade24.at -> langue = ru

www.handmade.24.at -> langue = de

On m'a dit que .htaccess était une bonne option pour forcer la variable linguistique ...

Mais comment puis-je définir les règles? De l'aide? Je suis mannequin en htaccess ...

mon htaccess ressemble à ça

Options +FollowSymlinks

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Ou peut-être pourriez-vous offrir une solution plus agréable?

Était-ce utile?

La solution

RewriteCond %{HTTP_HOST} ^(www\.)?handmade24\.at
RewriteRule ^(.*)$       $1?language=de [QSA,L]

RewriteCond %{HTTP_HOST} ^(\w+)\.handmade24\.at
RewriteRule ^(.*)$       $1?language=%1 [QSA,L]

Autres conseils

Voici le .htaccess qui devrait fonctionner pour vous:

Options +FollowSymlinks

# Prevent Directoy listing 
Options -Indexes

# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini)">
 Order deny,allow
 Deny from all
</FilesMatch>

# SEO URL Settings
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?_route_=$1 [QSA,L,NE]

RewriteCond %{HTTP_HOST} ^(www\.)?handmade24\.at$ [NC]
RewriteRule ^(.*)$ $1?language=de [QSA,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.handmade24\.at$ [NC]
RewriteRule ^(.*)$ $1?language=%1 [QSA,L]

Tout d'abord, j'ai supprimé le système OpenCart pour le projet que j'ai résolu votre problème, mais cette astuce devrait très bien fonctionner.

Oui, vous pouvez le faire avec .htaccess, mais je ne veux pas recommander cela. Pouvoir avec .htaccess peut être une douleur dans un certain endroit. Si vous le faites, à un moment donné, vous finirez probablement par faire quelque chose de mal et corrompre quelque chose. Ce n'est pas la seule solution, et c'est pourquoi je ne vous dirai pas comment le faire avec .htaccess.

La solution que je recommanderais est un petit travail / hack que je viens de faire. Je cherche un moyen de le faire avec des sous-domaines, car il s'agit du choix préféré de Google de faire les versions multi-langues des sites Web (sauf des TLD bien sûr).

J'ai trouvé la solution pour annuler la sélection / détection du langage OpenCart par défaut.

Tout d'abord, ouvrez index.php dans la racine de votre installation OpenCart.

Allez trouver les lignes avec ceci:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']){
     $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
     $code = $request->cookie['language'];
} elseif ($detect) {
     $code = $detect;
} else {
     $code = $config->get('config_language');
}

Remplacez ensuite ces lignes par ceci:

$url_info = parse_url(str_replace('&amp;', '&', $config->get('config_url')));

foreach ($languages as $language)
{
    if ($language['code'] . '.' . $url_info['host'] == $request->server['HTTP_HOST'])
    {
        $overwrite_language = $language;
        break;
    }
}

if (isset($overwrite_language)) {
    $code = $overwrite_language['code'];
} elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
    $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
    $code = $request->cookie['language'];
} elseif ($detect) {
    $code = $detect;
} else {
    $code = $config->get('config_language');
}

Ce que cela fait est (Remarque: OpenCart a chargé les langages disponibles à partir de la base de données quelques lignes plus tôt):

  1. Nous obtenons l'URL de la base de données ("Table de réglage" où key = 'config_url'), puis nous utilisons la fonction php parse_url, qui le divise en parties (faites un print_r () dessus pour voir quelles parties).

  2. Nous traversons ensuite les langues disponibles (celles qui sont activées dans le panneau d'administration).

  3. Dans la boucle, nous vérifions si le $language['code'] . '.' . $url_info['host'] == $request->server['HTTP_HOST'] (un alias de $_SERVER['HTTP_HOST']). J'ai mis un break Cela cesserait donc de gaspiller des ressources s'il avait déjà trouvé une langue correspondante pour le domaine.

  4. J'ai édité la déclaration if elseif, etc. else qu'OpenCart a faite avec celle ci-dessus. Ce qu'il fait, c'est qu'il vérifie si $ overwrite_language est défini, si c'est alors le langage que l'utilisateur "* sélectionné *", car il a frappé le if Dans la déclaration if elseif, etc. else, il ne fera pas d'exécuter les autres (qui écraseraient alors ce petit arrêt de travail / piratage).

- Astuce bonus -

Si vous avez accès au fichier de configuration php.ini ou si vous avez la permission d'utiliser ini_set (), vous pouvez partager votre session PHP entre les sous-domaines

ini_set('session.cookie_domain', '.yourdomain.TLD');

(vous devrez peut-être détruire une session déjà créée). Cela pourrait être un avantage, mais notez qu'il écrasera la langue de l'atelier par défaut, mais vous pouvez modifier le 2 ifest en dessous des lignes que vous venez de changer. Les devises devraient cependant fonctionner comme d'habitude.

-- Finir --

Cela devrait être ça, j'espère que vous l'aimerez et que vous pourrez l'utiliser, même s'il est long que vous avez posé cette question, peut-être que quelqu'un d'autre pourrait l'utiliser, tout comme je le pouvais il y a quelques heures.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top