Mã cửa hàng trong URL cho mỗi lượt xem cửa hàng ngoại trừ mặc định


10

Tôi đã bật Hệ thống > Cấu hình > Web > Thêm Mã cửa hàng vào URL và tôi đã thiết lập Chế độ xem cửa hàng mới cho Canada (/ ca /).

Tôi muốn có lý tưởng là example.com/ca/ tải Chế độ xem cửa hàng Canada, nhưng vẫn có example.com (không có default mã cửa hàng ở đó) cho cửa hàng mặc định.

Tôi đã nhận thấy rằng trang chủ hoạt động tốt trong vấn đề này, nhưng khi tôi đi vào một trang sản phẩm, Magento sẽ tự động bao gồm mã cửa hàng trong URL.

Lý do chính khiến tôi ngần ngại thay đổi các URL hiện tại cho cửa hàng mặc định của mình là vì tôi không muốn thấy chúng bị mất bất kỳ liên kết nào. Tôi biết rằng về mặt lý thuyết miễn là tôi thiết lập chuyển hướng 301, tôi sẽ ổn, nhưng tôi nghĩ rằng tôi đã đọc ở đâu đó rằng một lượng nhỏ nước trái cây vẫn bị mất.

Ngoài ra, tôi nghĩ rằng điều này có lẽ tốt hơn từ góc độ khả năng sử dụng. Nếu phần lớn lưu lượng truy cập của bạn là vào cửa hàng mặc định của bạn và khách hàng của bạn đã quen với URL thông thường, tại sao lại làm phiền họ với bổ sung /default/( /us/hoặc bất cứ điều gì) trong URL.

Tôi đã thử vô hiệu hóa Thêm mã cửa hàng vào các URL và chỉ cần thay đổi URL cơ sở cho Chế độ xem cửa hàng Canada của tôi thành example.com/ca/, nhưng dường như điều đó không làm gì cả. Tôi cho rằng nó cần cài đặt được bật để nhận mã cửa hàng trong URL và làm bất cứ điều gì với nó.

Câu trả lời:


9

Tôi đã không trở nên hạnh phúc khi sử dụng Thêm mã cửa hàng vào URL . Lý do chính là chúng tôi không thể có một số lượt xem cửa hàng sử dụng cùng một ngôn ngữ (xem câu hỏi của tôi ). Ngoài ra, tôi không thích sử dụng mã xem cửa hàng xấu chỉ vì URL.

Tôi đã thực hiện một thử nghiệm nhỏ bằng cách sử dụng mẹo "tạo thư mục con và tạo liên kết tượng trưng" thường xuyên và nó có thể hoạt động. Vui lòng kiểm tra nếu bạn thích nó.

  • Tạo thư mục con / ca /
  • Bên trong thư mục con tạo các liên kết tượng trưng đến
    • ../app
    • ..
    • ../bao gồm
    • ../index.php
    • ../js
    • ../lib
    • ../phương tiện truyền thông
    • ../da
    • ../var
    • (thêm các thư mục khác nếu bạn muốn / cần)
  • chỉnh sửa cấu hình vhost của bạn cho / ca / ​​(hoặc sao chép .htaccess sang / ca / ​​và chỉnh sửa nó) thành

    • Đặt cơ sở viết lại:

      RewriteBase /ca/

    • Khởi tạo chế độ xem cửa hàng chính xác dựa trên URL. Có nhiều cách để làm điều đó, một cách có thể là:

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

Nó làm việc cho tôi:

Tạo thư mục và liên kết tượng trưng không thú vị nhưng ít nhất bạn không phải chỉnh sửa các tệp cốt lõi.


2
Bạn chỉ phải tạo liên kết tượng trưng cho phương tiện, js và giao diện, sau đó chỉnh sửa đường dẫn lớp Mage thành ../app/Mage.php. Theo như tôi biết thì thế là đủ
Sander Mangel

2
Có, nếu bạn muốn chỉnh sửa các tập tin cốt lõi.
Matthias Zeis

@MatthiasZeis xin lỗi vì mất quá nhiều thời gian để chấp nhận! Đôi khi tôi mất dấu thông báo SE và thật khó để đánh dấu chúng là chưa đọc. Vui lòng ping tôi trên twitter trong tương lai nếu tôi mất thời gian để đánh dấu một câu trả lời là được chấp nhận! Ít nhất với twitter bạn có thể yêu thích một tweet để nhớ quay lại với nó. Xin lỗi và cảm ơn một lần nữa vì sự giúp đỡ ở đây! Câu trả lời chính xác!
kalenjordan

Đừng lo lắng! Tôi rất vui vì tôi có thể giúp bạn.
Matthias Zeis

2
Lời khuyên tuyệt vời! Hai đơn giản hóa có thể có: 1) Vì bạn tạo các cấu hình vhost riêng biệt hoặc các tệp .htaccess cho thư mục con, bạn có thể khởi tạo chế độ xem cửa hàng một cách đơn giản mà không cần điều kiện : SetEnv MAGE_STORE_VIEW ca. RewriteBasemặt khác thường không cần thiết. 2) Nó đủ để đặt liên kết tượng trưng thành index.php và ứng dụng, nếu bạn chỉ đặt URL Liên kết cơ sở thành / ca / ​​và để cấu hình URL cơ sở mặc định
Fabian Schmengler


1

Dựa trên câu trả lời của bình luận của mzeisfschmengler , đây là một cách làm KISS:

  1. Tạo thư mục con ca:mkdir ca
  2. Tạo một liên kết tượng trưng đến appthư mục:ln -s ../app/ ca/app
  3. Tạo một liên kết tượng trưng đến index.phptệp:ln -s ../index.php/ ca/index.php
  4. Tạo một .htaccesstệp trong cathư mục: touch ca/.htaccessvới nội dung sau:

    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. Dưới System > Configuration > Web, thiết lập Base Link URLđể {{unsecure_base_url}}ca/{{secure_base_url}}ca/tương ứng.

Nếu vì một lý do, RewriteOptions inheritmột phần là không thể cho bạn, bạn cũng có thể chỉ cần sao chép mặc định mod_rewritephần thành các thư mục của bạn .htaccesstập tin để thay thế.

Giải pháp này sẽ hoạt động tốt như giải pháp từ mzeis, nhưng nhỏ hơn và dễ dàng hơn nhiều.


0

tùy chọn khác là sử dụng tên miền phụ trên mỗi cửa hàng. Sau đó, bạn chỉ cần thiết lập Apache để báo cho magento biết "trang web / cửa hàng" nào sẽ sử dụng.

Bằng cách này, bạn có thể có nhiều "cửa hàng" và "lượt xem" trong các trang web tên miền phụ trong cùng một cửa hàng magento.

  • cài đặt nằm trong Hệ thống> Cấu hình> Chung / Web
  • Không an toàn. URL cơ sở
  • Đảm bảo . URL cơ sở
  • Bánh quy . Miền

đây là cửa hàng example.com lưu trữ cấu hình 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>

đây là "ca" lưu trữ cấu hình Apache bổ sung

<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 thêm phần này vào một trong các tệp system.xml của bạn (trong mô-đun ứng dụng / mã / cục bộ):

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

Bằng cách này, bạn có thể chọn tùy chọn "Thêm mã cửa hàng vào URL" cho mỗi lượt xem cửa hàng.


Bạn có thể chọn nó. Nhưng bạn có chắc chắn rằng nó thực sự hoạt động?
Fabian Schmengler

Có, đã thử nghiệm trên magento 1.9.x và magento EE 1.13.x
nverhoye

Sẽ thật tuyệt nếu điều này thực sự hiệu quả, nhưng tôi đã không thể thực hiện công việc này trong một thiết lập với một trang web và nhiều lượt xem cửa hàng. Đã thử nghiệm trên CE 1.9.2.3.
Aad Mathijssen

không làm việc cho tôi
Visakh B Sujathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.