Codice negozio nell'URL per ogni vista negozio ad eccezione del valore predefinito


10

Ho abilitato Sistema > Config > Web > Aggiungi codice negozio agli URL e ho impostato una nuova vista negozio per il Canada (/ ca /).

Vorrei idealmente avere example.com/ca/ caricare la vista Store Canada, ma avere ancora example.com (senza il defaultcodice negozio presente) per il negozio predefinito.

Ho notato che la home page funziona perfettamente in questo senso, ma quando entro in una pagina di prodotto, Magento include automaticamente il codice negozio nell'URL.

Il motivo principale per cui sono titubante nel cambiare i nostri attuali URL per il nostro negozio predefinito è solo perché odio vederli perdere qualsiasi collegamento. So che teoricamente fintanto che avrò 301 reindirizzamenti, dovrei andare bene, ma penso di aver letto da qualche parte che una piccola quantità di succo è ancora persa.

Inoltre, penso che questo sia probabilmente un po 'meglio dal punto di vista dell'usabilità. Se la maggior parte del tuo traffico è indirizzata al tuo negozio predefinito e i tuoi clienti sono abituati all'URL normale, perché disturbarli con l'aggiunta /default/( /us/o qualsiasi altra cosa) nell'URL.

Ho provato a disabilitare Aggiungi codice negozio agli URL e semplicemente cambiando l'URL di base per il mio Canada Store View a example.com/ca/, ma non sembra aver fatto nulla. Suppongo che sia necessario abilitare l'impostazione per prelevare il codice negozio nell'URL e fare qualsiasi cosa con esso.

Risposte:


9

Non sono diventato contento di usare Aggiungi codice negozio agli URL . Il motivo principale era che non potevamo avere più viste dello store usando la stessa lingua (vedi la mia domanda ). Oltre a ciò, non mi piaceva dover usare un codice di visualizzazione del negozio scadente solo a causa dell'URL.

Ho fatto un piccolo test usando il suggerimento "crea una sottocartella e crea collegamenti simbolici" frequentemente raccomandato e potrebbe funzionare. Controlla se ti piace.

  • Crea una sottocartella / ca /
  • All'interno della sottocartella creare collegamenti simbolici a
    • ../app
    • ../errori
    • ../includes
    • ../index.php
    • ../js
    • ../lib
    • ../media
    • ../pelle
    • ../var
    • (aggiungere altre directory se si desidera / è necessario)
  • modificare la configurazione di vHost per / ca / ​​(o copiare .htaccess in / ca / ​​e modificarlo) in

    • Imposta la base di riscrittura:

      RewriteBase /ca/

    • Inizializza la visualizzazione dell'archivio corretta in base all'URL. Ci sono molti modi per farlo, uno potrebbe essere:

      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]`

Ha funzionato per me:

La creazione di cartelle e collegamenti simbolici non è divertente ma almeno non è necessario modificare i file core.


2
Devi solo creare collegamenti simbolici per media, js e skin e quindi modificare il percorso della classe Mage in ../app/Mage.php. Per quanto ne so, dovrebbe bastare
Sander Mangel

2
Sì, se si desidera modificare i file core.
Matthias Zeis,

@MatthiasZeis dispiace aver impiegato così tanto tempo per accettare! A volte perdo le notifiche di SE ed è difficile contrassegnarle come non lette. Sentiti libero di chiamarmi su Twitter in futuro se prenderò un'eternità per contrassegnare una risposta come accettata! Almeno con Twitter puoi aggiungere un tweet ai preferiti per ricordarti di tornarci. Scusa e grazie ancora per l'aiuto qui! Bella risposta!
Kalenjordan,

Nessun problema! Sono felice di poterti aiutare.
Matthias Zeis,

2
Ottimo consiglio! Due possibili semplificazioni: 1) Dal momento che si creano configurazioni VHost separati o file .htaccess per la sottodirectory, è possibile inizializzare il negozio di vista semplice, senza condizioni: SetEnv MAGE_STORE_VIEW ca. RewriteBased'altra parte, di solito non è necessario. 2) Dovrebbe essere sufficiente impostare i collegamenti simbolici su index.php e sull'app, se si imposta l' URL del collegamento di base su / ca / ​​e si lascia la configurazione dell'URL di base predefinita
Fabian Schmengler,


1

Basato sulla risposta del commento di mzeis e fschmengler , ecco un modo KISS di farlo:

  1. Crea una sottodirectory ca:mkdir ca
  2. Creare un collegamento simbolico alla appdirectory:ln -s ../app/ ca/app
  3. Crea un link simbolico al index.phpfile:ln -s ../index.php/ ca/index.php
  4. Crea un .htaccessfile nella cadirectory: touch ca/.htaccesscon il seguente contenuto:

    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. Sotto System > Configuration > Web, imposta rispettivamente Base Link URLa {{unsecure_base_url}}ca/e {{secure_base_url}}ca/.

Se, per qualche motivo, la RewriteOptions inheritparte non è possibile per te, puoi anche semplicemente copiare la parte predefinitamod_rewrite nel tuo .htaccessfile della sottodirectory .

Questa soluzione dovrebbe funzionare come quella di Mzeis, ma è molto più piccola e più semplice.


0

un'altra opzione è quella di utilizzare un sottodominio per negozio. Quindi devi semplicemente configurare Apache per dire a Magento quale "sito web / negozio" usare.

In questo modo è possibile avere più "negozi" e "visualizzazioni" sotto i siti Web del sottodominio tutti nello stesso intall magento.

  • le impostazioni sono in Sistema> Configurazione> Generale / Web
  • Insicuro . URL di base
  • Sicuro . URL di base
  • Cookie Dominio

questo è il negozio example.com config Apache

<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>

questo è l'ulteriore "ca" store Apache config

<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 aggiungilo a uno dei tuoi file system.xml (nell'app / codice / modulo locale):

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

In questo modo puoi scegliere l'opzione "Aggiungi codice negozio agli URL" per visualizzazione negozio.


Sei in grado di selezionarlo. Ma sei sicuro che funzioni davvero?
Fabian Schmengler,

Sì, testato su magento 1.9.xe magento EE 1.13.x
nverhoye,

Sarebbe stato fantastico se funzionasse davvero, ma non sono stato in grado di farlo funzionare in un ambiente con un sito Web e più visualizzazioni del negozio. Testato su CE 1.9.2.3.
Aad Mathijssen,

non ha funzionato per me
Visakh B Sujathan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.