it-swarm.com.de

Entfernen Sie index.php? Route = common / home von OpenCart

Ich habe derzeit User SEO URL's in OpenCart Admin auf Ja gesetzt.

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

Bisher funktionieren alle Tags und SEO-Links. Der Befehl hat den gewünschten Effekt erzielt.

Allerdings für die Homepage und ein paar andere Links; Wie entferne ich:

index.php? route = common/home

Von der URL? Muss ich buchstäblich im Hardcode suchen und ersetzen PHP Dateien und Risiko-Upgrades oder gibt es einen anderen Weg?

(ohne Leistung aufzublähen, d. h. keine schlechten Amateur-Tools wie vQmod)

25
TheBlackBenzKid

Um dies einfach zu entfernen, können Sie ein einfaches Ersetzen in /catalog/controller/common/seo_url.php Durchführen.

Finden:

return $link;

Vorher es in eine neue Zeile setzen:

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

Edit by TheBlackBenzKid: Wenn du volle SEO willst, benutze einfach diese Zeile anstelle der obigen:

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

Stellen Sie außerdem sicher, dass die SEO-URLs im Admin-Bereich des Stores aktiviert sind.

27
Jay Gilford

Die vorherigen "Lösungen" sind falsch, weil sie die SEO-URL angreifen übersetzen. Was Sie wollen, ist die URL Generation in OpenCart zu behandeln.

Lassen Sie es uns einfach halten. Gehe zu /system/library/url.php und schauen Sie sich die public function link. Ersetzen Sie die Funktion durch diese 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;
}

So einfach. Ich kann nicht glauben, warum dies nicht im Kern von OpenCart ist.

EDIT:

Ich führe einige Tests durch und wenn die SEO-URLs aktiviert sind, muss im /catalog/controller/common/seo_url.php, um den Fehler "Undefinierter Index" zu vermeiden.

Innerhalb public function rewrite, ersetze diese Zeile:

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

Mit diesem:

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

Jetzt funktioniert es wirklich.

7

Die obige Lösung von Victor Schröder gefällt mir wegen ihrer Einfachheit sehr gut. Vielen Dank! Ich habe ein vQmod basierend auf seinen Code-Mods erstellt, falls es für irgendjemanden hilfreich sein sollte. Hier ist der 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

Schritt 01. Aktivieren Sie die USE SEO-URLs in Ihren Store-Servereinstellungen

Gehen Sie zum "System" und klicken Sie auf "Einstellungen". Suchen Sie das Geschäft, das Sie ändern möchten, und klicken Sie rechts auf den Link "Bearbeiten". Klicken Sie abschließend auf die Registerkarte "Server" und stellen Sie das Radio der SEO-URL auf "Ja" und speichern Sie Ihre Einstellungen.

Hinweis: Die Keywords werden nicht automatisch für Sie erstellt. Sie müssen auch Apache mod_rewrite aktiviert haben. Bei den meisten Webhosts ist dies standardmäßig aktiviert. In Schritt 3 dieses Tutorials erfahren Sie, wie Sie die Schlüsselwörter hinzufügen.

Schritt 02. Ändern Sie einige Inhalte in Ihrer .htaccess-Datei, um Ihre Startseite SEO-URL-freundlich zu gestalten

Gehen Sie zu Ihrem Host-Kontrollfeld und bearbeiten Sie Ihre .htaccess-Datei. Manchmal ist diese Datei versteckt, um sie wieder einzublenden. Klicken Sie dazu auf den Dateimanager Ihres Webhost-Kontrollfelds und aktivieren Sie die Option Versteckte Dateien anzeigen, gefolgt von der Schaltfläche „Los“.

Wenn Sie die .htaccess-Datei gefunden haben, ändern Sie die folgenden Zeilen:

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]

Zu:

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]

Wenn Sie den obigen Schritt ausführen, ändert sich Ihre Startseite von ungefähr: http://yourwebsite.com/index.php?route=common/home in: http://yourwebsite.com

Schritt 03. Manuelles Eingeben von SEO-Schlüsselwörtern für URLs Schließlich müssen Sie SEO-Schlüsselwörter für jede Seite, Information, jedes Produkt und jede Kategorie eingeben, deren URL Sie umschreiben möchten . Sie finden das Feld für die SEO-Schlüsselwörter auf der Registerkarte Daten, wenn Sie Elemente bearbeiten und erstellen.

Sobald Sie die SEO-Keywords eingegeben haben, funktionieren Ihre URLs.

Wenn Sie alle diese Anweisungen befolgt haben, können Sie die Vorteile von höheren Platzierungen, mehr Verkehr und mehr Kunden nutzen.

2
user1334789

Wie wäre es, wenn Sie einen Link im Logo durch <?php echo $base; ?> Ersetzen würden. Es wird ein Link zur Basisdomain erstellt und index.php?route=common/home Entfernt.

2
Kreativi

Jays Lösung funktioniert bei mir nicht, nach der Bearbeitung wird ein leerer Bildschirm angezeigt. Also habe ich ein neues gemacht:

Stellen Sie die Zeile vor:

return $link;

Statt nach:

public function rewrite($link) {
2
Vojta

Ich bin zu spät gekommen, aber meine Lösung könnte für andere nützlich sein (getestet mit Opencart 2.0.3.1):

Öffnen Sie Ihre MySQL-Konsole und führen Sie diese Abfrage aus (ändern Sie YOURDATABASE durch Ihren DB-Namen):

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

Wie es funktioniert:

Der Trick besteht darin, ein WEISSES LEERZEICHEN ('') für die Spalte "keyword" hinzuzufügen. Wenn Sie eine leere Zeichenfolge ('') einfügen, funktioniert diese Problemumgehung nicht und der URL-Rewriter gibt erneut Folgendes zurück: index.php? Route = common/Zuhause.

1
Frank

In der Datei\system\library\response.php füge die nächste Zeile am Anfang der public function output () hinzu

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

Öffnen Sie die Datei und ersetzen Sie den folgenden Code

<?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;
        }       
    }   
}
?>

------------------ WO DIE ÄNDERUNG ------------------ -------

Die folgende Zeile habe ich in Public Function index () auch Public Function rewrite hinzugefügt.

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

index () -Funktion Führen Sie dies aus

  1. Erhalten Sie die Abfrage von htaccss "? route= $ 1" (Beispiel: Die URL sieht aus wie site.com/shirts)
  2. also ist das route shirts
  3. jetzt überprüft die Funktion, ob die "Hemden" in der Tabelle "url_alias" gefunden wurden. Wenn sie gefunden wurden, wird eine Variable namens index.php? categoryID = Wert aus der Tabelle "url_alias" erstellt.
  4. Wenn in der url_alias-Tabelle keine Einträge für Hemden vorhanden sind, wird überprüft, ob es sich um einige andere Seiten wie Informationen oder Hersteller handelt, wenn festgestellt wird, dass sie eine get-Variable enthalten = Produkt/Hersteller/Info.
  5. Es wird jedoch nicht überprüft, ob es in Layouts vorhanden ist. Also habe ich den Code in else-Block hinzugefügt, der route in get variable setzt, wie diese index.php? Route = <route>
  6. Also in index () funktioniert es gut. Wie Same habe ich in Rewrite-Funktion.
0
rkaartikeyan

ich habe diese http://www.antropy.co.uk/index.php/blog/one-quick-opencart-seo-tip-to-avoid-a-duplicate-home-page/ arbeitete für mich beim Entfernen des Codes für meine Homepage

0
david