Speichern Sie den Code in der URL für jede Geschäftsansicht mit Ausnahme der Standardeinstellung


10

Ich habe System > Config > Web > Store Code zu URLs hinzufügen aktiviert und eine neue Store View für Kanada (/ ca /) eingerichtet.

Idealerweise möchte example.com/ca/ die Canada Store-Ansicht laden, aber weiterhin example.com (ohne den darin enthaltenen defaultStore-Code) für den Standard-Store.

Ich habe festgestellt, dass die Homepage in dieser Hinsicht einwandfrei funktioniert, aber wenn ich auf eine Produktseite gehe, fügt Magento den Geschäftscode automatisch in die URL ein.

Der Hauptgrund, warum ich zögere, unsere aktuellen URLs für unseren Standardspeicher zu ändern, ist nur, weil ich es hassen würde, wenn sie jeglichen Linksaft verlieren. Ich weiß, dass es mir theoretisch gut gehen sollte, solange ich 301 Weiterleitungen einrichte, aber ich glaube, ich habe irgendwo gelesen, dass immer noch eine kleine Menge Saft verloren geht.

Ich denke auch, dass dies aus Sicht der Benutzerfreundlichkeit wahrscheinlich etwas besser ist. Wenn der Großteil Ihres Datenverkehrs auf Ihr Standardgeschäft entfällt und Ihre Kunden an die reguläre URL gewöhnt sind, sollten Sie sie mit den zusätzlichen /default/( /us/oder was auch immer) in der URL belästigen .

Ich habe versucht, das Hinzufügen von Store-Code zu URLs zu deaktivieren und einfach die Basis-URL für meine Canada Store-Ansicht in example.com/ca/ zu ändern, aber das schien nichts zu bewirken. Ich gehe davon aus, dass die Einstellung aktiviert sein muss, um den Geschäftscode in der URL aufzunehmen und überhaupt etwas damit zu tun.

Antworten:


9

Ich war nicht glücklich darüber, Store Code zu URLs hinzuzufügen . Der Hauptgrund war, dass wir nicht mehrere Geschäftsansichten in derselben Sprache haben konnten (siehe meine Frage ). Außerdem hat es mir nicht gefallen, dass ich nur wegen der URL einen Code für die Ansicht eines schlechten Geschäfts verwenden muss.

Ich habe einen kleinen Test mit dem häufig empfohlenen Tipp "Unterordner erstellen und Symlinks erstellen" durchgeführt, der möglicherweise funktioniert. Bitte überprüfen Sie, ob es Ihnen gefällt.

  • Erstellen Sie einen Unterordner / ca /
  • Erstellen Sie im Unterordner symbolische Links zu
    • ../app
    • ../Fehler
    • ../inklusive
    • ../index.php
    • ../js
    • ../lib
    • ../Medien
    • ../Haut
    • ../var
    • (Fügen Sie weitere Verzeichnisse hinzu, wenn Sie möchten / müssen)
  • Bearbeiten Sie Ihre vHost-Konfiguration für / ca / ​​(oder kopieren Sie .htaccess nach / ca / ​​und bearbeiten Sie sie) nach

    • Stellen Sie die Umschreibbasis ein:

      RewriteBase /ca/

    • Initialisieren Sie die richtige Geschäftsansicht basierend auf der URL. Es gibt viele Möglichkeiten, dies zu tun:

      RewriteCond %{REQUEST_URI} ^/ca/.* [NC,OR]
      RewriteCond %{REQUEST_URI} ^/ca$ [NC]
      RewriteRule .* - [E=MAGE_RUN_CODE:ca]
      RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
      RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:store]`

Es hat bei mir funktioniert:

Das Erstellen von Ordnern und Symlinks macht keinen Spaß, aber zumindest müssen Sie keine Kerndateien bearbeiten.


2
Sie müssen nur Symlinks für Medien, JS und Skin erstellen und dann den Pfad der Magierklasse zu bearbeiten ../app/Mage.php. Soweit ich weiß, sollte das reichen
Sander Mangel

2
Ja, wenn Sie Kerndateien bearbeiten möchten.
Matthias Zeis

@MatthiasZeis tut mir leid, dass ich so lange gebraucht habe, um zu akzeptieren! Manchmal verliere ich den Überblick über SE-Benachrichtigungen und es ist schwierig, sie als ungelesen zu markieren. Sie können mich in Zukunft gerne auf Twitter anpingen, wenn ich ewig brauche, um eine Antwort als akzeptiert zu markieren! Zumindest bei Twitter können Sie einen Tweet favorisieren, um sich daran zu erinnern, darauf zurückzukommen. Entschuldigung und nochmals vielen Dank für die Hilfe hier! Gute Antwort!
Kalenjordan

Keine Bange! Ich bin froh, dass ich dir helfen konnte.
Matthias Zeis

2
Toller Rat! Zwei mögliche Vereinfachungen: 1) Da Sie separate vHost-Konfigurationen oder .htaccess-Dateien für das Unterverzeichnis erstellen, können Sie die Geschäftsansicht ohne Bedingungen einfach initialisieren : SetEnv MAGE_STORE_VIEW ca. RewriteBaseauf der anderen Seite ist in der Regel nicht notwendig. 2) Es sollte ausreichen, Symlinks auf index.php und app zu setzen, wenn Sie nur die Basis-Link-URL auf / ca / ​​setzen und die Standard- Basis-URL- Konfiguration
beibehalten


1

Basierend auf der Antwort von Mzeis und Fschmenglers Kommentar ist hier eine KISS-Methode:

  1. Erstellen Sie ein Unterverzeichnis ca:mkdir ca
  2. Erstellen Sie einen Symlink zum appVerzeichnis:ln -s ../app/ ca/app
  3. Erstellen Sie einen Symlink zur index.phpDatei:ln -s ../index.php/ ca/index.php
  4. Erstellen Sie eine .htaccessDatei im caVerzeichnis: touch ca/.htaccessmit folgendem Inhalt:

    SetEnv MAGE_RUN_CODE ca
    
    RewriteEngine On
    RewriteBase /en/
    
    # solves the issue that the environment variable MAGE_RUN_CODE is only available as REDIRECT_MAGE_RUN_CODE
    # see http://stackoverflow.com/a/10128290/719023 for details
    RewriteOptions inherit
  5. Unter System > Configuration > Websetzt die Base Link URLauf {{unsecure_base_url}}ca/und {{secure_base_url}}ca/ist.

Wenn aus irgendeinem Grund, der RewriteOptions inheritTeil für Sie nicht möglich ist, können Sie auch kopieren Sie einfach den Standard - mod_rewriteTeil in die Unterverzeichnis - .htaccessDatei statt.

Diese Lösung sollte genauso gut funktionieren wie die von Mzeis, ist aber viel kleiner und einfacher.


0

Eine andere Möglichkeit besteht darin, eine Subdomain pro Geschäft zu verwenden. Dann richten Sie einfach Apache ein, um Magento mitzuteilen, welche "Website / welcher Store" verwendet werden soll.

Auf diese Weise können Sie mehrere "Stores" und "Views" unter den Subdomain-Websites in derselben Magento-Installation haben.

  • Einstellungen finden Sie unter System> Konfiguration> Allgemein / Web
  • Unsicher. Basis-URL
  • Sicher. Basis-URL
  • Keks. Domain

Dies ist die Apache-Konfiguration von example.com store

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "default"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

Dies ist die zusätzliche "ca" -Speicher-Apache-Konfiguration

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "ca"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

0

Juste fügt dies einer Ihrer system.xml-Dateien hinzu (in app / code / local module):

<sections>
    <web>
        <groups>
            <url>
                <fields>
                    <use_store>
                        <show_in_store>1</show_in_store>
                    </use_store>
                </fields>
            </url>
        </groups>
    </web>
</sections>

Auf diese Weise können Sie die Option "Geschäftscode zu URLs hinzufügen" pro Geschäftsansicht auswählen.


Sie können es auswählen. Aber sind Sie sicher, dass es tatsächlich funktioniert?
Fabian Schmengler

Ja, getestet auf Magento 1.9.x und Magento EE 1.13.x
Nverhoye

Es wäre großartig gewesen, wenn dies tatsächlich funktioniert hätte, aber ich konnte dies nicht in einer Umgebung mit einer Website und mehreren Store-Ansichten ausführen. Getestet nach CE 1.9.2.3.
Aad Mathijssen

nicht für mich gearbeitet
Visakh B Sujathan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.