Simpan kode dalam URL untuk setiap tampilan toko kecuali untuk default

10

Saya telah mengaktifkan Sistem > Konfigurasi > Web > Tambahkan Kode Toko ke URL dan saya telah menyiapkan Tampilan Toko baru untuk Kanada (/ ca /).

Saya ingin memiliki contoh.com/ca/ memuat Tampilan Toko Kanada, tetapi masih memiliki example.com (tanpa defaultkode toko di sana) untuk toko default.

Saya perhatikan bahwa halaman beranda berfungsi dengan baik dalam hal ini, tetapi ketika saya membuka halaman produk, Magento secara otomatis memasukkan kode toko di URL.

Alasan utama mengapa saya ragu untuk mengubah URL kami saat ini untuk toko default kami adalah hanya karena saya benci melihat mereka kehilangan jus tautan. Saya tahu bahwa secara teoritis selama saya melakukan pengalihan 301, saya harus baik-baik saja, tetapi saya pikir saya telah membaca di suatu tempat bahwa sejumlah kecil jus masih hilang.

Juga, saya pikir ini mungkin agak lebih baik dari perspektif kegunaan. Jika sebagian besar lalu lintas Anda ke toko default Anda, dan pelanggan Anda terbiasa dengan URL reguler, mengapa repot-repot dengan tambahan /default/( /us/atau apa pun) di URL.

Saya sudah mencoba menonaktifkan Tambahkan Kode Toko ke URL dan hanya mengubah URL Basis untuk Tampilan Toko Kanada saya ke example.com/ca/, tetapi sepertinya tidak melakukan apa-apa. Saya berasumsi perlu pengaturan diaktifkan untuk mengambil kode toko di URL dan melakukan apa pun dengan itu.

kalenjordan
sumber

Jawaban:

9

Saya tidak senang menggunakan Tambahkan Kode Toko ke URL . Alasan utamanya adalah bahwa kami tidak dapat memiliki beberapa tampilan toko menggunakan bahasa yang sama (lihat pertanyaan saya ). Selain itu saya tidak suka saya harus menggunakan kode tampilan toko yang buruk hanya karena URL.

Saya melakukan tes kecil menggunakan tip "buat subfolder dan buat symlink" yang sering direkomendasikan dan mungkin berhasil. Silakan periksa apakah Anda menyukainya.

  • Buat subfolder / ca /
  • Di dalam subfolder, buat tautan simbolik ke
    • ../aplikasi
    • ../errors
    • ../termasuk
    • ../index.php
    • ../js
    • ../lib
    • ../media
    • ../kulit
    • ../var
    • (tambahkan direktori lain jika Anda mau / perlu)
  • edit konfigurasi vHost Anda untuk / ca / ​​(atau salin .htaccess ke / ca / ​​dan edit) ke

    • Atur basis penulisan ulang:

      RewriteBase /ca/

    • Menginisialisasi tampilan toko yang benar berdasarkan URL. Ada banyak cara untuk melakukannya, salah satunya adalah:

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

Ini bekerja untuk saya:

Membuat folder dan symlink tidak menyenangkan tetapi setidaknya Anda tidak perlu mengedit file inti.

Matthias Zeis
sumber
2
Anda hanya perlu membuat symlink untuk media, js dan skin lalu mengedit jalur kelas Mage ../app/Mage.php. Sejauh yang saya tahu itu sudah cukup
Sander Mangel
2
Ya, jika Anda ingin mengedit file inti.
Matthias Zeis
@MatthiasZeis menyesal telah lama menerima! Terkadang saya kehilangan jejak notifikasi SE dan sulit untuk menandainya sebagai belum dibaca. Jangan ragu untuk mem-ping saya di twitter di masa depan jika saya mengambil selamanya untuk menandai jawaban yang diterima! Setidaknya dengan twitter, Anda dapat favorit tweet agar ingat untuk kembali ke sana. Maaf dan terima kasih lagi atas bantuannya di sini! Jawaban bagus!
kalenjordan
Jangan khawatir! Aku senang bisa membantumu.
Matthias Zeis
2
Nasihat yang bagus! Dua kemungkinan penyederhanaan: 1) Karena Anda membuat konfigurasi vhost terpisah atau file htaccess untuk subdirektori, Anda dapat menginisialisasi tampilan toko langsung tanpa persyaratan: SetEnv MAGE_STORE_VIEW ca. RewriteBasedi sisi lain biasanya tidak perlu. 2) Seharusnya cukup untuk mengatur symlinks ke index.php dan aplikasi, jika Anda hanya mengatur URL Tautan Dasar ke / ca / ​​dan membiarkan konfigurasi URL Basis default
Fabian Schmengler
1

Berdasarkan jawaban komentar mzeis dan fschmengler , berikut adalah cara KISS untuk melakukannya:

  1. Buat subdirektori ca:mkdir ca
  2. Buat symlink ke appdirektori:ln -s ../app/ ca/app
  3. Buat symlink ke index.phpfile:ln -s ../index.php/ ca/index.php
  4. Buat .htaccessfile di cadirektori: touch ca/.htaccessdengan konten berikut:

    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. Di bawah System > Configuration > Web, atur Base Link URLke {{unsecure_base_url}}ca/dan {{secure_base_url}}ca/masing - masing.

Jika, untuk beberapa alasan, RewriteOptions inheritbagian tidak mungkin bagi Anda, Anda juga dapat hanya menyalin standar mod_rewritebagian dalam sub-direktori .htaccessfile bukan.

Solusi ini harus bekerja sebaik yang dari mzeis, tetapi jauh lebih kecil dan lebih mudah.

Simon
sumber
0

Pilihan lain adalah menggunakan subdomain per toko. Kemudian Anda hanya mengatur Apache untuk memberi tahu magento "situs web / toko" mana yang akan digunakan.

Dengan cara ini Anda dapat memiliki beberapa "toko" dan "tampilan" di bawah situs web subdomain semuanya dalam semua magento yang sama.

  • Pengaturan ada di System> Configuration> General / Web
  • Tidak aman . URL dasar
  • Aman URL dasar
  • Kue kering . Domain

ini adalah store config contoh.com

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin [email protected]
    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>

ini adalah tambahan "ca" store config Apache

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin [email protected]
    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>
Artistan
sumber
0

Cukup tambahkan ini ke salah satu file system.xml Anda (dalam modul app / code / local):

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

Dengan cara ini Anda dapat memilih opsi "Tambahkan Kode Toko ke URL" per tampilan toko.

nverhoye
sumber
Anda dapat memilihnya. Tapi apakah Anda yakin itu benar-benar berfungsi?
Fabian Schmengler
Ya, diuji pada magento 1.9.x dan magento EE 1.13.x
nverhoye
Akan sangat bagus jika ini benar-benar bekerja, tetapi saya belum dapat membuat ini berfungsi dalam pengaturan dengan satu situs web dan beberapa tampilan toko. Diuji pada CE 1.9.2.3.
Aad Mathijssen
tidak bekerja untuk saya
Visakh B Sujathan