web-dev-qa-db-fra.com

Supprimer index.php? Route = common / home d'OpenCart

J'ai actuellement User SEO URL's défini sur Oui dans OpenCart Admin.

System -> Settings -> Store -> Server -> User SEO URL's

Jusqu'à présent, tous les tags et liens SEO fonctionnent; la commande a fait l'effet souhaité.

Cependant pour la page d'accueil et quelques autres liens; comment retirer:

index.php? route = common/home

De l'URL? Dois-je littéralement faire une recherche et remplacer dans le hardcode PHP et mises à niveau des risques ou existe-t-il une autre façon?

(sans performances de ballonnement, c'est-à-dire pas de mauvais outils amateurs tels que vQmod)

25
TheBlackBenzKid

Pour supprimer simplement cela, vous pouvez effectuer un remplacement de base dans /catalog/controller/common/seo_url.php

Trouver:

return $link;

Avant il sur une nouvelle ligne mis:

$link = str_replace('index.php?route=common/home', '', $link);

Edit by TheBlackBenzKid: Si vous voulez un référencement complet, utilisez simplement cette ligne au lieu de ce qui précède:

$link = str_replace('index.php?route=', '', $link);

Assurez-vous également que les URL de référencement sont activées dans le panneau d'administration de la boutique.

27
Jay Gilford

Les "solutions" précédentes sont erronées car elles attaquent l'URL SEO translate. Ce que vous voulez, c'est gérer l'URL génération dans OpenCart.

Restons simples. Aller à /system/library/url.php et regardez le public function link. Remplacez la fonction par cette version:

public function link($route, $args = '', $connection = 'NONSSL') {
    if ('NONSSL' == $connection) {
        $url = $this->url;
    } else {
        $url = $this->ssl;  
    }

    if ('common/home' == $route) {
        if ($args) {
            $url .= '?' . str_replace('&', '&', '&' . ltrim($args, '&')); 
        }
    } else {
        $url .= 'index.php?route=' . $route;
        if ($args) {
            $url .= str_replace('&', '&', '&' . ltrim($args, '&')); 
        }
    }

    foreach ($this->rewrite as $rewrite) {
        $url = $rewrite->rewrite($url);
    }

    return $url;
}

Aussi simple que ça. Je ne peux pas comprendre pourquoi ce n'est pas dans le noyau d'OpenCart.

MODIFIER:

Je lance quelques tests et si les URLs SEO sont activées, il devient nécessaire de faire une seule modification dans le /catalog/controller/common/seo_url.php pour éviter une erreur "Index non défini".

À l'intérieur public function rewrite, remplacez cette ligne:

parse_str($url_info['query'], $data);

Avec celui-ci:

if (isset($url_info['query'])) parse_str($url_info['query'], $data);

Maintenant ça marche vraiment.

7
Victor Schröder

J'aime vraiment la solution de Victor Schröder ci-dessus pour sa simplicité. Merci! J'ai créé un vQmod basé sur ses mods de code au cas où cela serait utile à quiconque. voici le code:

<modification>

    <file name="system/library/url.php">
        <operation>
            <search position="before"><![CDATA[$url .= 'index.php?route=' . $route;]]></search>
            <add><![CDATA[
                if ('common/home' == $route) {
                    if ($args) {
                        $url .= '?' . str_replace('&', '&amp;', '&' . ltrim($args, '&'));
                    }
                } else {
            ]]></add>
        </operation>
        <operation>
            <search position="before"><![CDATA[foreach ($this->rewrite as $rewrite) {]]></search>
            <add><![CDATA[
                }
            ]]></add>
        </operation>
    </file>

    <file name="catalog/controller/common/seo_url.php">
        <operation>
            <search position="replace"><![CDATA[parse_str($url_info['query'], $data);]]></search>
            <add><![CDATA[
                if (isset($url_info['query'])) parse_str($url_info['query'], $data);
            ]]></add>
        </operation>
    </file>

</modification>
7
billynoah

Étape 01. Activez UTILISER les URL SEO dans les paramètres de votre serveur de magasin

Allez dans le "Système" et cliquez sur "Paramètres". Localisez le magasin que vous souhaitez modifier et cliquez sur le lien "Modifier" sur la droite. Enfin, cliquez sur l'onglet "Serveur" et réglez la radio de l'URL SEO sur "Oui" et enregistrez vos paramètres.

Remarque: Les mots clés ne seront pas créés automatiquement pour vous. Vous devez également activer Apache mod_rewrite. La plupart des hébergeurs Web l’activeront par défaut. L'étape 3 de ce didacticiel explique comment ajouter les mots clés.

Étape 02. Modifiez du contenu dans votre fichier .htaccess pour rendre votre page d'accueil optimisée pour les URL SEO

Accédez au panneau de configuration de votre hôte et modifiez votre fichier .htaccess. Parfois, ce fichier est caché afin de le révéler, vous pouvez cliquer sur le gestionnaire de fichiers de votre panneau de contrôle de l'hôte Web et cocher l'option Afficher les fichiers cachés, puis le bouton "Aller".

Une fois que vous avez localisé le fichier .htaccess, modifiez les lignes suivantes:

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

À:

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^index\.php$ http://www.yourwebsite.co.uk? [R=301,L]

Si vous effectuez l'étape ci-dessus, votre page d'accueil passera de quelque chose comme ceci: http://yourwebsite.com/index.php?route=common/home à ceci: http://yourwebsite.com

Étape 03. Saisissez manuellement les mots clés SEO pour les URL Enfin, vous devez saisir des mots clés SEO pour chaque page, information, produit et catégorie que vous souhaitez réécrire. . Vous pouvez trouver le champ pour les mots-clés SEO sous l'onglet Données lors de la modification et de la création d'éléments.

Une fois que vous aurez saisi les mots clés SEO, votre URL fonctionnera.

Une fois que vous avez suivi toutes ces instructions, vous pouvez commencer à profiter des avantages d'un classement plus élevé, d'un trafic accru et d'un plus grand nombre de clients.

2
user1334789

Que diriez-vous de remplacer un lien dans le logo par <?php echo $base; ?>. Il fera un lien vers le domaine de base et supprimera index.php?route=common/home.

2
Kreativi

La solution de Jay ne fonctionne pas pour moi, après modification, je reçois un écran vide. J'en ai donc fait un nouveau:

Mettez la ligne avant:

return $link;

Au lieu d’après:

public function rewrite($link) {
2
Vojta

Je suis arrivé en retard mais ma solution pourrait être utile pour d'autres (testée sur Opencart 2.0.3.1):

Ouvrez votre console MySQL et exécutez cette requête (changez YOURDATABASE avec votre nom de base de données):

INSERT INTO `YOURDATABASE`.`url_alias` (`url_alias_id`, `query`, `keyword`) VALUES (NULL, 'common/home', ' ');

Comment ça fonctionne:

L'astuce consiste à ajouter un ESPACE BLANC ('') pour la colonne "mot-clé", si vous insérez une chaîne vide ('') cette solution de contournement ne fonctionne pas et le réécrivain d'URL renverra à nouveau index.php? Route = common/Accueil.

1
Frank

Dans le fichier\system\library\response.php, ajoutez la ligne suivante au début de la fonction publique output ()

if (!defined('HTTP_CATALOG')) $this->output = str_replace(array('index.php?route=common/home', '?route=common/home'), '', $this->output);
0
w4kskl

/catalog/controller/common/seo_url.php

Ouvrez le fichier et remplacez le code ci-dessous

<?php
class ControllerCommonSeoUrl extends Controller {
    public function index() {
        // Add rewrite to url class
        if ($this->config->get('config_seo_url')) {
            $this->url->addRewrite($this);
        }

        // Decode URL
        if (isset($this->request->get['_route_'])) {
            $parts = explode('/', $this->request->get['_route_']);

            foreach ($parts as $part) {

                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");

                if ($query->num_rows) {
                    $url = explode('=', $query->row['query']);

                    if ($url[0] == 'product_id') {
                        $this->request->get['product_id'] = $url[1];
                    }

                    if ($url[0] == 'category_id') {
                        if (!isset($this->request->get['path'])) {
                            $this->request->get['path'] = $url[1];
                        } else {
                            $this->request->get['path'] .= '_' . $url[1];
                        }
                    }   

                    if ($url[0] == 'manufacturer_id') {
                        $this->request->get['manufacturer_id'] = $url[1];
                    }

                    if ($url[0] == 'information_id') {
                        $this->request->get['information_id'] = $url[1];
                    }   
                } else {
                    $this->request->get['route'] = 'error/not_found';   
                }
            }

            if (isset($this->request->get['product_id'])) {
                $this->request->get['route'] = 'product/product';
            } elseif (isset($this->request->get['path'])) {
                $this->request->get['route'] = 'product/category';
            } elseif (isset($this->request->get['manufacturer_id'])) {
                $this->request->get['route'] = 'product/manufacturer/info';
            } elseif (isset($this->request->get['information_id'])) {
                $this->request->get['route'] = 'information/information';
            }else {
                $this->request->get['route'] = $this->request->get['_route_'];
            }

            if (isset($this->request->get['route'])) {
                return $this->forward($this->request->get['route']);
            }
        }
    }

    public function rewrite($link) {
        if ($this->config->get('config_seo_url')) {
            $url_data = parse_url(str_replace('&amp;', '&', $link));
            $url = ''; 

            $data = array();

            parse_str($url_data['query'], $data);
            foreach ($data as $key => $value) {

                if (isset($data['route'])) {
                    if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
                        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");

                        if ($query->num_rows) {
                            $url .= '/' . $query->row['keyword'];

                            unset($data[$key]);
                        }                   
                    } elseif ($key == 'path') {
                        $categories = explode('_', $value);

                        foreach ($categories as $category) {
                            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");

                            if ($query->num_rows) {
                                $url .= '/' . $query->row['keyword'];
                            }                           
                        }

                        unset($data[$key]);
                    }else {
                        $url .= '/'.$value;
                    }
                }
            }

            if ($url) {
                unset($data['route']);

                $query = '';

                if ($data) {
                    foreach ($data as $key => $value) {
                        $query .= '&' . $key . '=' . $value;
                    }

                    if ($query) {
                        $query = '?' . trim($query, '&');
                    }
                }

                return $url_data['scheme'] . '://' . $url_data['Host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query;
            } else {
                return $link;
            }
        } else {
            return $link;
        }       
    }   
}
?>

------------------ OERE LE CHANGEMENT ------------------ -------

La ligne ci-dessous a été ajoutée dans l'index de la fonction publique (), ainsi que la réécriture de la fonction publique.

else {
this->request->get['route'] = $this->request->get['_route_'];
}

fonction index () Fonctionne comme ceci

  1. Obtenez la requête de htaccss "? route= $ 1" (Ex: l'url ressemble à site.com/shirts)
  2. donc le route est des chemises
  3. maintenant, la fonction vérifie que les "chemises" se trouvent dans la table url_alias si elles sont trouvées, alors faites-en une variable comme index.php? categoryID = Valeur de la table url_alias.
  4. Ou bien s'il n'y a pas d'enregistrement dans la table url_alias pour les chemises, alors ses vérifications indiquent qu'il s'agit d'autres pages comme information ou fabricant si elle le trouve faire une variable get Exemple index.php? Route = information/information ou index.php? Route = produit/fabricant/info.
  5. Mais ce n'est pas le cas, il se trouve dans les mises en page. J'ai donc ajouté le code dans le bloc else qui définit la route dans la variable get comme celle-ci index.php? Route = <route>
  6. Donc, dans index () fonctionne correctement. Comme Same, je l'ai fait dans la fonction de réécriture.
0
rkaartikeyan

j'ai eu ça http://www.antropy.co.uk/index.php/blog/one-quick-opencart-seo-tip-to-avoid-a-duplicate-home-page/ travaillé pour moi en supprimant le code de ma page d'accueil

0
david