Je vous écris ce tuto très rapide pour vous débarrasser du sous dossier /fr dans les urls de votre boutique Prestashop si jamais vous aviez décidé de passer au multilingue. A partir d’une boutique en langue française, si vous vous avez activé une ou plusieurs autres langues (ex: Anglais, Espagnol …), le système va automatiquement ajouter le code des langues dans les urls. Ceci ayant pour conséquence de faire apparaître un sous-dossier fr dans toutes les urls existantes de votre boutique en française. Conséquence peu réjouissante pour votre SEO.

La solution

Changements simples à effectuer en 3 étapes.

1ère étape

Le premier changement avec la fonction getLangLink de la classe Link (/classes/Link.php)

protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)    {
if (!$context) {
$context = Context::getContext();
}
if ((!$this->allow && in_array($id_shop, array($context->shop->id,  null))) || !Language::isMultiLanguageActivated($id_shop) || !(int)Configuration::get('PS_REWRITING_SETTINGS', null, null, $id_shop)) {
return '';
}
if (!$id_lang) {
$id_lang = $context->language->id;
}
if(Language::getIsoById($id_lang)=='fr'){
return '';
}
return Language::getIsoById($id_lang).'/';
}

2ème étape

Le second changement dans la fonction setRequestUri de la classe Dispatcher (/classes/Dispatcher.php)

protected function setRequestUri()
{
if (isset($_SERVER['REQUEST_URI'])) {
$this->request_uri = $_SERVER['REQUEST_URI'];
} elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
$this->request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
}
$this->request_uri = rawurldecode($this->request_uri);
if (isset(Context::getContext()->shop) && is_object(Context::getContext()->shop)) {
$this->request_uri = preg_replace('#^'.preg_quote(Context::getContext()->shop->getBaseURI(), '#').'#i', '/', $this->request_uri);
}
if ($this->use_routes && Language::isMultiLanguageActivated()) {
if (preg_match('#^/([a-z]{2})(?:/.*)?$#m', $this->request_uri, $m)) {
$_GET['isolang'] = $m[1];
$this->request_uri = substr($this->request_uri, 3);
}else{
$_GET['isolang'] = 'fr';
}
}
}

3ème et dernier changement

Le 3ème se situe au niveau des templates de votre thème, la variable smarty $base_dir ou $base_dir_ssl sera a changé par {$link->getPageLink(‘index.php’)}, l’occurrence la plus fréquente se situera au niveau du template header.tpl pour le lien du logo.
A plus !

David